PHP-Laravel 框架中,数据填充(模型工厂)
1.创建模型以及生成数据库迁移:php artisan make:model Flight -m
该命令在app目录下的Models文件中生成了UserInfo模型(如果是php artisan make:model Flight -m,则在app目录下生成模型文件)。-m 是 --migration简写,表示在database\migrations目录下生成一个迁移文件:
这是我们生成的数据库迁移文件,user_infos表示执行迁移文件后的数据表名:
请注意,我们并没有告诉 UserInfo模型使用哪个数据表。 除非明确地指定了其它名称,否则将使用类的复数形式「蛇形命名」来作为表名。因此,在这种情况下,Eloquent 将假设 UserInfo模型存储的是 user_infos数据表中的数据。你可以通过在模型上定义 table 属性来指定自定义数据表:
2.编写数据库迁移文件,我们可以 $table->foreign('user_id')->references('id')->on('users');使用外键约束
3.我们根据模型文件,创建工厂文件:php artisan make:factory UserInfoFactory --model=Models\UserInfo,文件在database\factories下
在这个工厂文件中,我们可以编写模型工厂:https://www.cnblogs.com/jxl1996/p/10335920.html(faker数据填充详解)
4.现在我们生成填充文件:php artisan make:seeder UserInfoSeeder;文件在database\seeds下
我们可以在UserInfoSeeder.php中可以用 查询构造器 或 Eloquent 模型工厂 来手动插入数据。不过我们将使用模型工厂,所以我们在databaseSeeder文件中简单传递要运行的 seeder 类名称即可:
5.我们在userSeed而文件中,完成数据填充:
如果我们要关联填充,则必须在User模型中关联UserInfo模型:
6.至此,我们所有的准备工作已经完成了,现在,我们执行php artisan migrate:fresh --seed,这将删除所有表并重新运行所有迁移。这个命令可以用来重建数据库:
执行成功!我们已经重新生成了数据表以及填充了数据信息:
users表:
user_infos表:
7.结尾
(1)第3条,我们执行:php artisan make:factory UserInfoFactory --model=Models\UserInfo,会生成:
如果是php artisan make:factory UserInfoFactory --model=UserInfo,将 是 use App\UserInfo;由于我们生成模型文件时的路径是在app\Models目录下,所以若是该命令--model=UserInfo,将会无法找到该模型文件,只要在UserInfoFactory文件中将use App\UserInfo;改成use App\Models\UserInfo;
(2)如果是一对多,则在User模型中定义:
在UserSeeder文件中:
所以我们观察到comments表中数据:一个用户拥有多个评论信息