kettle / dynamodb-orm
A lightweight object-dynamodb mapper for PHP
Installs: 201 579
Dependents: 0
Suggesters: 0
Security: 0
Stars: 50
Watchers: 1
Forks: 28
Open Issues: 6
Requires
- php: >=5.4.0
- aws/aws-sdk-php: 3.*
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2025-03-01 17:38:49 UTC
README
Kettle is a lightweight object-dynamodb mapper for PHP. Kettle provides a simple interface to Amazon DynamoDB.
See Some Code
<?php use Kettle\ORM; $user = ORM::factory('User')->findOne(10); $user->name = 'John'; $user->save(); $tweets = ORM::factory('Tweet')->where('user_id', 10) ->findMany(); foreach ($tweets as $tweet) { echo $tweet->text . PHP_EOL; }
- Installation
Package is available on Packagist, you can install it using Composer.
$ cat <<EOF > composer.json
{
"require": {
"kettle/dynamodb-orm": "0.2.*"
}
}
EOF
$ composer install
- Configuration
<?php use Kettle\ORM; ORM::configure("key", 'AWS_KEY'); ORM::configure("secret", 'AWS_SECRET'); ORM::configure("region", 'AWS_REGION'); // In order to use DynamoDB Local, you need to set "base_url". // ORM::configure("base_url", 'http://localhost:8000/');
If you are using multiple aws account, use as follows.
<?php use Kettle\ORM; ORM::configure("key", 'AWS_KEY', 'account-2'); ORM::configure("secret", 'AWS_SECRET', 'account-2'); ORM::configure("region", 'AWS_REGION', 'account-2'); $user = ORM::factory('User', 'account-2');
- Create Model Class
<?php class User extends ORM { protected $_table_name = 'user'; protected $_hash_key = 'user_id'; protected $_schema = array( 'user_id' => 'N', // user_id is number 'name' => 'S', // name is string 'age' => 'N', 'country' => 'S', ); }
If you use a generator, you can also create an class as follows.
$ php bin/kettle-skeleton.php --table-name user --region ap-northeast-1 > User.php
Table must have been created in advance. Because this generator generates a class based on the information and data collected by the "describeTable" and "scan" operation.
- Create
<?php $user = ORM::factory('User')->create(); $user->user_id = 1; $user->name = 'John'; $user->age = 20; $user->save();
- Retrieve
<?php $user = ORM::factory('User')->findOne(1); echo $user->name. PHP_EOL; print_r($user->asArray());
- Update
<?php $user = ORM::factory('User')->findOne(1); $user->age = 21; $user->save();
- Delete
<?php $user = ORM::factory('User')->findOne(1); $user->delete();
- Find
<?php $tweets = ORM::factory('Tweets') ->where('user_id', 1) ->where('timestamp', '>', 1397264554) ->findMany(); foreach ($tweets as $tweet) { echo $tweet->text . PHP_EOL; }
- Find first record
<?php $tweet = ORM::factory('Tweets') ->where('user_id', 1) ->where('timestamp', '>', 1397264554) ->findFirst(); echo $tweet->text . PHP_EOL;
- Find by Global Secondary Index
<?php $users = ORM::factory('User') ->where('country', 'Japan') ->where('age', '>=', 20) ->index('country-age-index') // specify index name ->findMany();
- Query Filtering
<?php $tweets = ORM::factory('Tweets') ->where('user_id', 1) ->filter('is_deleted', 0) // using filter ->findMany();