我有一个 speciality
可以有很多 procedures
。
我想用许多程序来播种这两个专业。
型号:
专业
class Speciality extends Model
{
protected $fillable = ['name'];
public function procedures() {
return $this->hasMany('App\Procedure');
}
}
过程
class Procedure extends Model
{
protected $fillable = ['speciality_id', 'name'];
public function speciality() {
return $this->belongsTo('App\Speciality');
}
}
工厂:
专业
$factory->define(App\Speciality::class, function (Faker $faker) {
return [
'name' => 'Example'
];
});
过程
$factory->define(App\Procedure::class, function (Faker $faker) {
return [
'name' => $faker->realText(20)
];
});
播种:
public function run()
{
factory(App\Speciality::class)->create()
->each(function($speciality) {
$speciality->procedures()
->saveMany(factory(App\Procedure::class, rand(5,20))
->make()
);
});
}
显示的错误是:
speciality_id
未设置为 procedure
工厂中的值,因为它是专业的外键。但我对使用 $speciality->procedures()
的理解是它会在播种时自动分配 speciality_id。请问为什么会出现这个错误。非常感谢。
最佳答案
我在这里可能是错的,但我认为当你调用 make
时只有一个小问题:
public function run()
{
factory(App\Speciality::class)->create()
->each(function($speciality) {
$speciality->procedures()
->saveMany(factory(App\Procedure::class, rand(5,20))->make());
});
}
之前从未将其与
saveMany()
一起使用,仅使用 save()
,但尝试一下?