如何在模型工厂中定义外键。例如,如果我有一个组织表,其中包含国家/地区表的外键,则在我的模型工厂中,我必须为国家/地区 ID 定义一个虚拟值,如下所示:
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => 197,
];
});
在我的组织表 Seeder 类中,我正在执行以下操作,但 faker 对象不存在 - 我是否需要在我的 Seeder 类中创建一个新的 faker 对象?
use Illuminate\Database\Seeder;
class OrganisationsTableSeeder extends Seeder
{
public function run()
{
$countryIds = Country::lists('id')->all();
factory('App\Organisation', 3)->create([
// override factory default
'country_id' => $faker->randomElement[$countryIds],
]);
}
}
数据库播种器类
class DatabaseSeeder extends Seeder
{
public function run()
{
Model::unguard();
$this->call('CountriesTableSeeder');
$this->call('OrganisationsTableSeeder');
Model::reguard();
}
}
定义模型工厂时定义外键的最佳方法是什么?是否可以从模型工厂中省略country_id并将其添加到播种器类中 - 从文档看来,您似乎只能覆盖模型工厂中定义的现有值,但无法通过播种器类添加新值 - 正确如果我错了呢?
我可能在这方面有点晚了,但我遇到了同样的问题,这为我解决了它。你应该能够做到
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => factory(App\Country::class)->create()->id,
];
});
然后在你的种子中你只需要调用
factory(App\Organisation::class, 5)->create();
它也会为你创建国家。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)