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

posted @ 2022-04-09 21:56  jamstack  阅读(536)  评论(0编辑  收藏  举报