yui019 / hori
受Prisma启发的Laravel数据库模式库。
Requires
- php: ^8.0
README
受 Prisma 启发的Laravel数据库模式库。
这与正常的Laravel迁移有什么不同?
如果你从未使用过NodeJS库 Prisma,它的作用是为你处理创建迁移。你有一个单一的schema文件,在其中写入所有表和添加/删除表的迁移或列都是自动生成的。
所以如果你想从表中删除一列,你只需要在schema文件中删除它,然后运行 php artisan hori:generate
,这将自动生成一个删除该列的迁移。
这种方法的两个优点
- 直接在一个schema文件上工作比手动为每个更改创建迁移要容易得多、快得多
- 你不需要查看所有迁移或数据库来了解你目前有哪些表和行 - 你只需查看schema文件即可
用法
你可以使用以下命令安装Hori
composer require yui019/hori
之后,你运行
php artisan hori:install
这将创建一个包含 schema.php
文件的 hori
目录在 database
目录中。
这是该文件的默认外观
<?php use Illuminate\Database\Schema\Blueprint; use Yui019\Hori\Schema; return new class extends Schema { public function create(): void { $this->table('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); $this->createDefaultLaravelTables(); // ... } };
$this->createDefaultLaravelTables()
行创建默认的laravel表,如 password_reset_tokens
、cache
、jobs
等。 - 即每个laravel项目中默认存在的3个迁移创建的所有表,除了 users
表。
该表在 schema.php
文件的上方创建。我做出这个选择的原因是,修改默认的 users
表是非常常见的,而其他表有99%的时间保持不变,所以感觉在默认情况下将所有这些表都放在那里会显得太拥挤。
该命令还会删除这三个默认迁移。你可以选择传递 --dont-delete-default-migrations
选项来避免删除。
接下来,你运行命令
php artisan hori:generate
并给它一个迁移名称。
这将创建一个在 database/migrations
目录中的迁移,该迁移将创建所有这些表。
现在,假设你想向用户表添加一个 photo
列。通常,你需要手动创建一个 add_photo_column
迁移来添加该列(在 down
方法中删除它)。
使用Hori,你只需向schema文件中添加一行,如 $table->string('photo');
,然后再次运行 php artisan hori:generate
。这将自动创建一个执行相同操作的迁移。
特性
- 创建表
- 修改表
- 删除表
- 重命名表
- 添加列
- 删除列
- 添加外键约束
- 更改列
- 重命名列
- 根据外键约束自动重新排序创建的表