softr/mako-schema-builder

此软件包最新版本(dev-master)没有提供许可证信息。

Mako 框架的数据库模式构建包

dev-master 2018-12-30 13:34 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:29 UTC


README

这是一个为 Mako 框架(>=4.5)提供的简单数据库模式构建包。

此包在Phinx之上运行

安装

使用 composer 安装。只需将包添加到您的项目中。

composer require softr/mako-schema-builder:*

现在您可以使用单个命令更新您的项目。

composer update

注册服务

安装后,您需要在 app/config/application.php 文件中注册该包。

'packages' =>
[
    ...
    'web' =>
    [
        ...
        // Register the package for web app
        'softr\MakoSchemaBuilder\SchemaPackage',
    ],
    'cli' =>
    [
        ...
        // Register the package for command line app
        'softr\MakoSchemaBuilder\SchemaPackage',
    ]
],

创建表

要创建一个新的数据库表,请使用 create 方法。create 方法接受两个参数。第一个是表名,第二个是一个闭包,它接收一个对象,用于定义新的表

$this->schema->create('users', function($table)
{
    $table
        ->addColumn('username', 'string', ['limit' => 20])
        ->addColumn('password', 'string', ['limit' => 40])
        ->addColumn('password_salt', 'string', ['limit' => 40])
        ->addColumn('email', 'string', ['limit' => 100])
        ->addIndex(['username', 'email'], ['unique' => true]);
});

修改表

要修改现有表,请使用 table 方法。table 方法接受两个参数。第一个是表名,第二个是一个闭包,它接收一个对象,用于定义将要修改的表

$this->schema->table('users', function($table)
{
    $table->addColumn('username', 'string', ['limit' => 20])
          ->changeColumn('email', 'string', ['limit' => 255]);
});

连接

您还可以指定一个替代连接。只需使用 connection 方法指定连接名称。

$this->schema->connection('foo')->create('table', function($table)
{
    ....
});

重命名/删除表

要重命名现有的数据库表,请使用 renameTable 方法

$this->schema->renameTable('from', 'to');

要删除现有表,您可以使用 dropTabledropIfExists 方法

$this->schema->dropTable('users');

$this->schema->dropIfExists('users');

检查表/列是否存在

您可以使用 hasTablehasColumnhasColumns 方法轻松检查表或列的存在

if($this->schema->hasTable('users'))
{
    // Do something
}

if($this->schema->hasColumn('users', 'email'))
{
    // Do something
}

if($this->schema->hasColumns('users', ['name', 'email']))
{
    // Only returns true if all fields exists on table
}

处理列

获取列列表

要检索所有表列,只需调用 getTableColumns 方法。此方法将返回一个列名数组。

$columns = $this->schema->getTableColumns('users');

重命名列

要重命名列,请访问 Table 对象的实例然后调用 renameColumn 方法。

$table->renameColumn('bio', 'biography');

在另一个列之后添加列

在添加列时,您可以使用 after 选项指定其位置。

$table->addColumn('city', 'string', ['after' => 'email']);

删除列

要删除列,请使用 removeColumn 方法。

$table->removeColumn('short_name');

指定列限制

您可以使用 limit 选项限制列的最大长度。

$table->addColumn('short_name', 'string', ['limit' => 30]);

更改列属性

要更改现有列的类型或选项,请使用 changeColumn 方法。

$table->changeColumn('email', 'string', ['limit' => 255]);

处理索引

要向表中添加索引,您可以在表对象上调用 addIndex() 方法。

$table->addIndex(['email']);

我们可以向 addIndex() 方法传递一个额外的参数来指定唯一索引。

$table->addIndex(['email'], ['unique' => true]);

删除索引就像调用 removeIndex() 方法一样简单。您必须对每个索引调用此方法。

$table->removeIndex(['email']);

处理外键

Phinx 支持在数据库表上创建外键约束。让我们向一个示例表添加外键

$this->schema->create('tags', function($table)
{
    $table->addColumn('tag_name', 'string')
});

$this->schema->create('tag_relationships', function($table)
{
    $table->addColumn('tag_id', 'integer')
          ->addForeignKey('tag_id', 'tags', 'id', ['delete'=> 'SET_NULL', 'update'=> 'NO_ACTION']);
});

您还可以向 addForeignKey 传递列的数组。这允许我们与使用组合键的表建立外键关系。

$this->schema->table('follower_events', function($table)
{
    $table->addColumn('user_id', 'integer')
          ->addColumn('follower_id', 'integer')
          ->addColumn('event_id', 'integer')
          ->addForeignKey(['user_id', 'follower_id'], 'followers', ['user_id', 'follower_id'], ['delete'=> 'NO_ACTION', 'update'=> 'NO_ACTION']);
});

我们还可以轻松检查外键是否存在

$this->schema->table('tag_relationships', function($table)
{
    if($table->hasForeignKey('tag_id'))
    {
        // do something
    }
});

最后,要删除外键,请使用 dropForeignKey 方法。

$this->schema->table('tag_relationships', function($table)
{
    $table->dropForeignKey('tag_id');
});

有效列类型

关于完整的已接受列类型,请检查在以下链接上的官方文档:点击这里

限制

此包仅在 MySQL 数据库上进行了测试。请自由地为该项目做出贡献。