softr / mako-schema-builder
Mako 框架的数据库模式构建包
Requires
- php: >=5.4
- robmorgan/phinx: 0.8.1
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');
要删除现有表,您可以使用 dropTable
或 dropIfExists
方法
$this->schema->dropTable('users'); $this->schema->dropIfExists('users');
检查表/列是否存在
您可以使用 hasTable
、hasColumn
和 hasColumns
方法轻松检查表或列的存在
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
数据库上进行了测试。请自由地为该项目做出贡献。