Laravel заполняет атрибуты в модели при миграции, даже если они не заполняются - PullRequest
1 голос
/ 06 июля 2019

У меня есть две сущности:

  1. Person, у которого есть столбец workspace_id
  2. PersonRevision, у которого нет столбца workspace_id

В миграции Iиметь это:

$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, но это неудобно и не отвечает, почему это происходит.

1 Ответ

0 голосов
/ 06 июля 2019

Не могли бы вы проверить, какой фактический SQL-оператор выполняется? Мне кажется, что у вас есть база данных, которая еще не содержит workspace_id, но ваша модель ожидает, что она там будет. Даже если не заполнить workspace_id, запрос, сгенерированный из вашей красноречивой модели, вероятно, попытается обновить его до значения null, чего он не может сделать, если его там нет.

Из-за подобных проблем лучше не использовать красноречивые модели при переносе баз данных, вместо этого используйте raw sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...