proai / laravel-super-migrations
这个Laravel包适用于大型数据库,以获得更好的迁移结构。
Requires
- php: ^8.0
- illuminate/database: ^10.0||^11.0
README
这是一个Laravel迁移的扩展。当您有一个大型数据库并产生大量迁移文件时,它非常有用。这个包将帮助您减少迁移文件的数量,并且它还会给您一个更好的结构,您将可以在一个文件中拥有一个表的全部模式更新。
安装
您可以通过composer安装此包
composer require proai/laravel-super-migrations
用法
基本上,我们不通过迁移定义表构建器模式,而是通过表。为此,您需要在database/migrations
目录中创建一个tables
文件夹。对于每个表,我们将在新目录中创建一个文件,并在需要的地方将这些文件链接到迁移文件中。以下是更详细的说明
迁移类
首先,这是在database/migrations
文件夹中的一个迁移文件。请注意,我们扩展了ProAI\SuperMigrations\Migration
类。与up()
和down()
方法不同,这个类需要一个schemas()
方法
<?php use ProAI\SuperMigrations\Migration; class InitProject extends Migration { /** * Get table names and related methods for up and down schemas. * * @return array */ public function schemas() { return [ 'users' => 'create', 'comments' => 'create' ]; } }
schemas()
方法返回受此迁移影响的全部数据库表列表(例如上面的users
和comments
表)。由于一个数据库表可能有多个迁移,因此我们还需要为每个表分配一个特定的迁移名称(例如,对于users
和comments
表,名称为create
)。
使用这种模式,我们可以轻松地将模式捆绑到一个迁移文件中。另一个例子:假设我们想要添加一个角色表并在用户表中添加一个role_id
列,那么schemas()
方法可能如下所示
return [ 'roles' => 'create', 'users' => 'addRoleIdColumn' ];
这个想法是,一个迁移文件包含整个更新步骤的所有模式,而不是只针对一个表(即一个迁移InitProject
与多个迁移CreateUsersTable
、CreateCommentsTable
等)。这样,您将拥有更少的迁移文件。
表类
对于schemas()
方法返回的每个表名,Laravel Super Migrations将在database/migrations/tables
中搜索具有相同名称的PHP文件(例如,对于表users
,必须存在一个文件users.php
)。该文件必须包含一个扩展ProAI\SuperMigrations\Table
的类,并以表名(驼峰式)加Table
后缀命名。例如,对于表users
,类名必须是UsersTable
。
此外,对于我们在迁移文件中声明的每个特定的迁移名称,表类必须声明一个具有相同名称的方法(例如,用户表的create
方法)。以下是一个与上一节迁移类相匹配的示例用户表类
<?php use Illuminate\Database\Schema\Blueprint; use ProAI\SuperMigrations\Table; use Illuminate\Support\Facades\DB; class UserTable extends Table { /** * Create the table. * * @return void */ public function create() { // These statements will be only executed if direction of migrations is up $this->upSchema()->create(function (Blueprint $table) { $table->increments('id'); $table->timestamps(); }); $this->up(function($tableName) { DB::raw('ALTER TABLE `'.$tableName.'` ADD `client_id` BINARY(16)'); }); // These statements will be only executed if direction of migrations is down $this->downSchema()->dropIfExists(); $this->down(function($tableName) { // some code }); } }
我们使用$this->upSchema()
和$this->downSchema()
来定义上和下模式。这些方法返回一个类似于Laravel数据库模式构建器的ProAI\SuperMigrations\Builder
实例(请参阅Laravel文档)。唯一的区别是您不需要将表名作为第一个参数,因为表名已经已知。此外,我们使用$this->up(...)
和$this->down(...)
来插入自定义代码,如原始DB语句(通常我们不需要这些方法)。
生成器命令
运行 php artisan make:super-migration
来创建一个符合此包模式的新的迁移类。您可以使用 --path
选项声明自定义路径。请注意,您必须包含服务提供者才能使用此命令(请参阅安装部分)。
支持
错误和功能请求在 GitHub 上跟踪。
许可证
此包是在 MIT 许可证 下发布的。