我有两个实体:
- 有workspace_id列的人
- termevision,没有workspace_id列
在迁移中,我有一个:
$persons = Person::all();
foreach ($persons as $person) {
$revision = new PersonRevision;
$revision->fill($person->getAttributes());
$revision->save();
}
persovision在fillable
属性中没有workspace_id
。但是由于某种原因,我遇到了一个错误:column "workspace_id" of relation "person_revisions" does not exist
。
此外,如果我第二次运行迁移(仅键入php artisan migrate
第二次(,则可以正常工作。
原因是什么?我知道我可以手动列出需要填充或使用array_except
的属性,但这是不便的,并且没有回答为什么会发生。
您可以检查执行的实际SQL语句是什么?对我来说,似乎您有一个数据库,该数据库尚未包含workspace_id
,但是您的模型确实希望它在那里。即使不填充workspace_id
,从您的雄辩模型中生成的查询也可能会尝试使用值null
进行更新,如果它不存在,则无法做到。
由于这样的问题,最好不要在数据库迁移中使用雄辩的模型,而是使用RAW SQL。
laravel seedcommand handle((函数使用model :: ungarded((运行,该功能强迫所有道具填充。当无人看守是正确的时,无论填充阵列如何,它都会自动填充。
public function isFillable($key)
{
if (static::$unguarded) {
return true;
}
[...]
}
只需将其添加到您的播种机文件模型:: reguard((;