helium/laravel-dynamodb

此包已废弃,不再维护。作者建议使用 helium/laravel-helpers 包。

Laravel 创建DynamoDB迁移的插件

dev-master 2019-09-13 15:39 UTC

This package is auto-updated.

Last update: 2020-04-29 16:46:49 UTC


README

Laravel 创建DynamoDB "迁移"的插件

安装

composer require helium/laravel-dynamodb

用法

配置

将以下行添加到你的 app.php 文件中的 package 服务提供者部分

Helium\DynamoDb\DynamoDbServiceProvider::class,

将以下行添加到你的 database.php 文件中的数据库连接部分

'dynamodb' => [
    'group' => env('APP_NAME'),
    'region' => env('DYNAMO_REGION'),
    'version' => env('DYNAMO_VERSION', 'latest'),
    //'endpoint' => env('DYNAMO_HOST'),
    'credentials' => [
        'key' => env('DYNAMO_KEY'),
        'secret' => env('DYNAMO_SECRET'),
    ]
],

如果你使用的是 AWS 默认之外的其他端点,可以取消注释 endpoint 键值对。

可选,将默认连接设置为 dynamodb

迁移

创建迁移

php artisan make:migration

use Illuminate\Database\Schema\Blueprint; 替换为 use Helium\DynamoDb\Schema\Blueprint;

如果你没有将 dynamodb 设置为默认连接,请指定正确的连接

Schema::connection('dynamodb')->...

支持的 schema 函数

  • create($table, $callback) - 创建新表
  • drop($table) - 删除表
  • dropIfExists($table) - drop 的别名

支持的 blueprint 函数

  • string($name) - 创建一个类型为 S 的新属性
  • number($name) - 创建一个类型为 N 的新属性
  • binary($name) - 创建一个类型为 B 的新属性
  • partitionKey($name) - 使用之前创建的属性名设置表分区键
  • sortKey($name) - 使用之前创建的属性名设置表排序键
  • globalSecondaryIndex($name) - 创建新的全局二级索引
    • partitionKey($name) - 使用之前创建的属性名设置索引分区键
    • sortKey($name) - 使用之前创建的属性名设置索引排序键
  • localSecondaryIndex($name) - 创建新的本地二级索引
    • sortKey($name) - 使用之前创建的属性名设置索引排序键
    • 请注意,分区键可能不能手动设置,它将根据 AWS 规范 自动设置为表的分区键。

示例

public function up() {
    Schema::connection('dynamodb')->create('Account', function (Blueprint $table) {
        $table->number('id');
        $table->string('email');
        $table->binary('active');

        $table->partitionKey('id');
        $table->sortKey('email);

        $table->globalSecondaryIndex('byEmail')
            ->partitionKey('email')
            ->sortKey('active');

        $table->localSecondaryIndex('byActive')
            ->sortKey('active');
    });
}

public function down() {
    Schema::connection('dynamodb')->dropIfExists('Account');
}

请注意,创建的表将被赋予格式 ProjectName.TableName。这是为了提供一些组织性,并防止项目之间的重复表,因为DynamoDB不支持单个实例内的单独“数据库”或“集合”,这与许多其他数据库系统标准不同。