laravel 生成migration并执行migrate,使用seeder填充表
在不同版本的laravel里都提供有cli,此处以laravel 8为例:
-- 生成migration,laravel 8生成的migration里默认使用$table->id()代表主键,也可以使用$table->increment('id')代替
php artisan make:migration create_cars_table
-- migrate
php artisan migrate
-- migrate指定文件
php artisan migrate --path=/database/migrations/2022_04_09_212120_create_cars_table.php
-- 生成数据库表的seeder填充文件
php artisan make:seeder CarsSeeder
编辑 database/seeders/CarsSeeder.php ,在run方法里加上这样一句
\App\Models\Cars::factory(10)->create(); // 这要求database/factories/CarsFactory.php已经存在
保存后,执行 php artisan db:seed --class=CarsSeeder 进行填充
上面的操作过于繁琐,这里有一个简化的命令,那就是创建model的时候加上 -fm参数,即:
php artisan make:model Cars -fm
这里的参数 -fm 的意思是生成model文件,对应的migration迁移文件和factory文件,m 理解为 migration file,f则是factory的意思,-fm 即:生成迁移文件和factory文件,如果要重新生成,需要先删掉model、migration、factory文件后再次执行 php artisan make:model Cars -fm
有时候,数据库里已经存在对应的表,又不能直接删除这些数据库里已经存在的表,想在migrate的时候忽略已经存在的表,方法是:在迁移文件里加上一个判断,如果表已经存在,则不执行迁移,代码如下:
if (Schema::hasTable('users')) { return; }
参考资料
https://laravel.com/docs/8.x/seeding#main-content
https://www.suzu6.net/posts/213-migrate-skip-if-exist/
https://qiita.com/kunrenyouAcount/items/276b5fa3efc01cbc1864