方便团队合作的 Laravel Migration
需求
在数据库建表来存储文章信息,表名为:topics。
最简单的做法,直接通过MySQL
客户端建表,如果后期有修改,也直接通过MySQL
客户端来修改。
问题
如果是小型应用或者个人项目,通过MySQL
客户端建表的方式能够快速满足需求,但是对于大型项目,可能存在以下问题:
如何把数据库的每一次变动都记录下来?
如何在团队间传递数据库的变动?
如何在不同的运行环境之间同步数据库的变动,比如从开发环境到生产环境?
关于 Laravel Migration
Laravel Migration
巧妙的解决了上述问题,它就像是对数据库进行的版本控制,让你的团队能够轻松地去定义和共享程序的数据库结构。 Laravel Migration
通常配合 Laravel 的结构生成器,可以轻松生成应用程序的数据库结构。
创建表
% php artisan make:migration create_topics_table
Created Migration: 2020_10_19_094104_create_topics_table
打开database/migrations
下新增的数据库迁移文件,补充数据库的结构,最终如下:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTopicsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('topics', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('topics');
}
}
执行迁移
php artisan migrate
复杂一些的情况
// 创建分类
Category::factory()->times(10)->create()->each(function ($category) {
$category->datas()->saveMany(
// 每个分类下创建服务
Data::factory()->times(mt_rand(1, 20))->create()->each(function ($data) {
$data->apis()->saveMany(
// 每个服务下创建API
DataApi::factory()->times(mt_rand(1, 20))->create()
);
$data->errorCodes()->saveMany(
// 每个服务下创建错误码
DataErrorCode::factory()->times(mt_rand(1, 20))->create()
);
})
);
});