我有两个实体:
在迁移中,我有这个:
$persons = Person::all();
foreach ($persons as $person) {
$revision = new PersonRevision;
$revision->fill($person->getAttributes());
$revision->save();
}
PersonRevision在workspace_id
属性中没有fillable
。但是由于某种原因,我得到了一个错误:column "workspace_id" of relation "person_revisions" does not exist
。
此外,如果我第二次运行迁移(只需再次键入php artisan migrate
),就可以正常工作。
可能是什么原因?我知道我可以手动列出需要填写的属性,或使用array_except
,但这很不方便,无法回答为什么会发生这种情况。
答案 0 :(得分:0)
您能检查一下实际执行的sql语句吗?在我看来,您的数据库似乎还不包含workspace_id
,但是您的模型确实希望它存在。即使不填写workspace_id
,从雄辩的模型中生成的查询也可能会尝试使用值null
对其进行更新,如果不存在,则无法执行。
由于这样的问题,最好不要在数据库迁移中使用雄辩的模型,而应使用原始sql。
答案 1 :(得分:0)
Laravel SeedCommand handle() 函数与 Model::ungarded() 一起运行,它强制所有道具都是可填充的。当 unguarded 为 true 时,无论可填充数组如何,它都会自动填充。
public function isFillable($key)
{
if (static::$unguarded) {
return true;
}
[...]
}
只需将此添加到您的播种机文件 Model::reguard();