Laravel填充了迁移模型中的属性,即使它们不可填充



我有两个实体:

  1. 有workspace_id列的人
  2. 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((;

最新更新