【发布时间】:2018-09-27 21:16:22
【问题描述】:
我有一个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()
);
});
}
显示的错误是:
SQLSTATE[HY000]:一般错误:1364 字段“speciality_id”没有 有一个默认值(SQL:插入
procedures(name,updated_at,created_at) 值(这意味着很多。,2018-04-17 2018-04-17 19:09:31 19:09:31))
speciality_id 没有设置为 procedure 工厂中的值,因为它是该专业的外键。但我对使用$speciality->procedures() 的理解是它会在播种时自动分配speciality_id。
请问为什么会出现这个错误。非常感谢。
【问题讨论】:
-
不使用过程工厂检查 ->saveMany([ new Procedure(['name' => 'A new name']) ]);
-
如果可行,则问题出在您的工厂
-
您在代码中显示的模型是相同的还是简化的?
-
他们是同一个@Kyslik。
-
您的代码对我有用。尝试调试
HasOneOrMany::setForeignAttributesForCreate()。
标签: laravel laravel-5 laravel-seeding