DynamoDb 的 Laravel 模型和辅助工具包装器

0.2.2 2016-05-05 10:52 UTC

README

支持所有键类型 - 主哈希键和组合键。

安装

  • Composer 安装

    composer require baopham/dynamodb:0.2.2
  • 安装服务提供者

    // config/app.php
    
    'providers' => [
        ...
        BaoPham\DynamoDb\DynamoDbServiceProvider::class,
        ...
    ];
  • 将 DynamoDb 配置放在 config/services.php

    // config/services.php
        ...
        'dynamodb' => [
            'key' => env('DYNAMODB_KEY'),
            'secret' => env('DYNAMODB_SECRET'),
            'region' => env('DYNAMODB_REGION'),
            'local_endpoint' => env('DYNAMODB_LOCAL_ENDPOINT'), // see http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html
            'local' => env('DYNAMODB_LOCAL'), // true or false? should use dynamodb_local or not?
        ],
        ...

使用方法

  • 通过扩展 BaoPham\DynamoDb\DynamoDbModel 来扩展你的模型,然后你可以使用支持的方法。这里的想法是你可以切换回 Eloquent 而不需要更改你的查询。

支持的方法

// find and delete
$model->find(<id>);
$model->delete();

// Using getIterator(). If 'key' is the primary key or a global/local index and the condition is EQ, will use 'Query', otherwise 'Scan'.
$model->where('key', 'key value')->get();

// See BaoPham\DynamoDb\ComparisonOperator
$model->where(['key' => 'key value']);
// Chainable for 'AND'. 'OR' is not supported.
$model->where('foo', 'bar')
    ->where('foo2', '!=' 'bar2')
    ->get();

// Using scan operator, not too reliable since DynamoDb will only give 1MB total of data.
$model->all();

// Basically a scan but with limit of 1 item.
$model->first();

// update
$model->update($attributes);

$model = new Model();
// Define fillable attributes in your Model class.
$model->fillableAttr1 = 'foo';
$model->fillableAttr2 = 'foo';
// DynamoDb doesn't support incremented Id, so you need to use UUID for the primary key.
$model->id = 'de305d54-75b4-431b-adb2-eb6b9e546014'
$model->save();
  • 或者,如果你想将你的数据库表与 DynamoDb 表同步,使用特性 BaoPham\DynamoDb\ModelTrait,它将在模型保存后调用 PutItem

组合键

要使用组合键与你的模型一起使用

  • $compositeKey 设置为包含键属性名称的数组,例如。
protected $primaryKey = ['customer_id'];
protected $compositeKey = ['customer_id', 'agent_id'];
  • 要查找具有组合键的记录
$model->find(['id1' => 'value1', 'id2' => 'value2']);

测试

运行

$ java -Djava.library.path=./DynamoDBLocal_lib -jar dynamodb_local/DynamoDBLocal.jar --port 3000
$ ./vendor/bin/phpunit
  • DynamoDb 本地版本:2015-07-16_1.0

  • DynamoDb 本地壳创建的测试用例的 DynamoDb 本地模式位于这里

需求

Laravel ^5.1

待办事项

  • 升级一些遗留属性:AttributesToGetScanFilter,...

许可协议

MIT

作者和贡献者