kettle/dynamodb-orm

PHP的轻量级对象-DynamoDB映射器

v0.2.8 2016-01-02 16:50 UTC

README

Kettle 是一个轻量级的 PHP 对象-DynamoDB 映射器。Kettle 提供了一个简单的接口来操作 Amazon DynamoDB。

查看一些代码示例

<?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;
}
  1. 安装

此包可在 Packagist 上找到,您可以使用 Composer 安装它。

$ cat <<EOF > composer.json
{
    "require": {
        "kettle/dynamodb-orm": "0.2.*"
    }
}
EOF

$ composer install
  1. 配置
<?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", 'https://:8000/');

如果您正在使用多个 AWS 账户,请按照以下方式操作。

<?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');
  1. 创建模型类
<?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',
     );
}

如果您使用生成器,也可以创建如下类。

$ php bin/kettle-skeleton.php --table-name user --region ap-northeast-1 > User.php

表必须已经提前创建。因为此生成器基于“describeTable”和“scan”操作收集的信息和数据来生成类。

  1. 创建
<?php

$user = ORM::factory('User')->create();
$user->user_id = 1;
$user->name    = 'John';
$user->age     = 20;
$user->save();
  1. 检索
<?php

$user = ORM::factory('User')->findOne(1);
echo $user->name. PHP_EOL;

print_r($user->asArray());
  1. 更新
<?php

$user = ORM::factory('User')->findOne(1);
$user->age = 21;
$user->save();
  1. 删除
<?php

$user = ORM::factory('User')->findOne(1);
$user->delete();
  1. 查找
<?php

$tweets = ORM::factory('Tweets')
        ->where('user_id', 1)
        ->where('timestamp', '>', 1397264554)
        ->findMany();

foreach ($tweets as $tweet) {
     echo $tweet->text . PHP_EOL;
}
  1. 查找第一条记录
<?php

$tweet = ORM::factory('Tweets')
        ->where('user_id', 1)
        ->where('timestamp', '>', 1397264554)
        ->findFirst();

echo $tweet->text . PHP_EOL;
  1. 通过全局二级索引查找
<?php

$users = ORM::factory('User')
        ->where('country', 'Japan')
        ->where('age', '>=', 20)
        ->index('country-age-index')  // specify index name
        ->findMany();
  1. 查询筛选
<?php

$tweets = ORM::factory('Tweets')
          ->where('user_id', 1)
          ->filter('is_deleted', 0) // using filter
          ->findMany();