如何在模型工厂中定义外键。例如,如果我有一个组织表,其中包含国家/地区表的外键,则在我的模型工厂中,我必须为国家/地区ID定义虚拟值,如下所示:
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => 197,
];
});
在我的组织表播种器类我正在做以下但是faker对象不存在 - 我需要在播种器类中创建一个新的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并将其添加到播种器类中 - 从文档中可以看出,您只能覆盖模型工厂中定义的现有值,但是您无法通过播种器类添加新值 - 正确我,如果我错了吗?
答案 0 :(得分:2)
我可能在这个问题上有点晚了,但我遇到了同样的问题,这对我来说已经解决了。你应该可以做到
$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();
它也将为您创建国家/地区。
答案 1 :(得分:0)
Laravel团队,Otwell,Stauffer et.al.建议的方式是这样的。
测试> Adding Relations To Models
Adding relationships to your models
<强> ModelFactory.php 强>
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => 197,
];
});
$factory->define(App\Country::class, function ($faker) {
return [
'name' => $faker->country,
];
});
<强>播种机强>
$organisations = factory('App\Organisation', 3)
->create()
->each(function($$organisation) {
$organisation->relatedItems()->save(factory('App\Country')->make());
});