ada*_*m78 7 foreign-keys seeding faker laravel-5.1
如何在模型工厂中定义外键.例如,如果我有一个组织表,其中包含国家/地区表的外键,则在我的模型工厂中,我必须为国家/地区ID定义虚拟值,如下所示:
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => 197,
];
});
Run Code Online (Sandbox Code Playgroud)
在我的组织表中播种器类我正在做以下但是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],
]);
}
}
Run Code Online (Sandbox Code Playgroud)
数据库播种者类
class DatabaseSeeder extends Seeder
{
public function run()
{
Model::unguard();
$this->call('CountriesTableSeeder');
$this->call('OrganisationsTableSeeder');
Model::reguard();
}
}
Run Code Online (Sandbox Code Playgroud)
什么是定义模型工厂时定义外键的最佳方法?是否可以从模型工厂中省略country_id并将其添加到播种器类中 - 从文档中可以看出,您只能覆盖模型工厂中定义的现有值,但是您无法通过播种器类添加新值 - 正确我,如果我错了?
我可能在这方面有点晚了,但我遇到了同样的问题,这为我解决了它。你应该能够做到
$factory->define(App\Organisation::class, function ($faker) {
return [
'name' => $faker->company,
'country_id' => factory(App\Country::class)->create()->id,
];
});
Run Code Online (Sandbox Code Playgroud)
然后在你的种子中你只需要调用
factory(App\Organisation::class, 5)->create();
Run Code Online (Sandbox Code Playgroud)
它也会为你创建国家。