我正在尝试对Laravel进行测试。 我正在尝试创建一个虚构的职位名称,然后为该职位添加10个人。
PositionsFactory.php
$factory->define(App\Position::class, function (Faker $faker) {
return [
'p_id' => $faker->unique()->randomNumber($nbDigits = 8),
'name' => $faker->word,
'org' => $faker->word,
'user_id' => 1
];
});
这是我的EmployeeFactory.php
$factory->define(App\Employee::class, function (Faker $faker) {
return [
'FirstName' => $faker->name,
'LastName' => $faker->lastName,
'pid' => $position->p_id,
'org'=> $position->org,
'user_id' => 1,
];
});
这是我的一次尝试,但是没有用
for ($i=0; $i < 5; $i++ ){
$position = factory('App\Position')->create();
factory('App\Employee',10)->create(
'pid' => $position->pid,
'org' => $position->org
);
}
我尝试循环5次,对于每个循环,我想创建10个具有相同职位ID的员工。但显然我缺少了一些东西。
我尝试在Employee工厂中添加$ position,效果很好。
$factory->define(App\Employee::class, function (Faker $faker) {
$position = factory('App\Position')->create();
return [
'FirstName' => $faker->name,
'LastName' => $faker->lastName,
'pid' => $position->p_id,
'org'=> $position->org,
'user_id' => 1,
];
});
有没有办法做类似的事情,
$factory('App\Position',5)->create($factory('App\Employee',10));
也许我错过了一些回电服务,但有些失落。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
我认为您可能正在寻找each
之后可以调用的create
方法:
// Generate 5 positions and execute a callback
// function for each position created
factory(App\Position::class, 5)->create()->each(function ($position) {
// In the callback, generate 10 employees
// and manually override the foreign key
factory(App\Employee::class, 10)->create([
'pid' => $position->id
]);
});
有关each
和处理关系的更多信息:https://laravel.com/docs/5.6/database-testing#relationships。
希望有帮助!
答案 1 :(得分:0)
您可以分别创建它们并遍历集合。
$positions = factory('App\Position', 3)->make();
foreach ($positions as $position){
$employes = factory('App\Employee', 3)->make();
foreach ($employes as $employee){
$employee->p_id = $position->id;
//etc.. watever you want to connect
}
}
现在您拥有1个职位集合和1个按职位划分的雇员集合 请注意,make方法不会保存到数据库,您需要手动保存它们
您还可以按照文档https://laravel.com/docs/5.6/database-testing#using-factories
中所述更改工厂。您的样子:
$factory->define(App\Employee::class, function (Faker $faker) {
return [
'FirstName' => $faker->name,
'LastName' => $faker->lastName,
'org'=> $position->org,
'user_id' => 1,
'pid' => function () {
return factory('App\Position')->create()->id;
}
];
});
这将为工厂创建的每个用户创建一个职位。 如果您已有职位,也可以改用现有的雄辩模型。