Laravel 5 — Обновление связанных моделей с помощью push ()

Я пытаюсь сделать это:

$volunteer = Volunteer::with('user')->find($id);

$input = $updateVolunteerRequest->all();

$volunteer->fill($this->fillFields($input));

$volunteer->user->fill([
'email' => $input['email']
]);

$volunteer->push();

Но push() Метод, похоже, не работает.

Выдает следующую ошибку:

FatalErrorException in Model.php line 1463:
Call to a member function push() on a non-object
It worked in Laravel 4. Is there a new way of doing this in version 5? Or am I doing something wrong.

Я проверил $volunteer и он возвращает модель.

1

Решение

push метод перебирает все загруженные отношения на модели и вызывает push на них тоже. Так что это не push на $ доброволец, который терпит неудачу, это push на связанной модели, которая терпит неудачу.

В Ларавеле 4, push имеет следующий код:

foreach ($this->relations as $models)
{
foreach (Collection::make($models) as $model)
{
if ( ! $model->push()) return false;
}
}

В этом коде, если отношение вернуло NULL, ошибки не было бы. Collection::make(NULL) возвращает пустой массив, поэтому foreach никогда не будет выполнен. Тем не менее, в Laravel 5, push имеет этот код:

foreach ($this->relations as $models)
{
$models = is_array($models) ? $models : array($models);

foreach ($models as $model)
{
if ( ! $model->push()) return false;
}
}

В этом случае, если отношение равно нулю, возникнет ошибка, так как array(NULL) возвращает массив с одной записью: значение NULL. Итак, цикл foreach будет выполнен, и он попытается вызвать push на значение NULL, в результате чего ваш Call to a member function push() on a non-object ошибка.

Итак, похоже, что это ошибка в Laravel 5.

Похоже, push() метод был обновлен из-за обновления, сделанного для объекта Collection. Я отправил запрос на удаление, чтобы исправить проблему. Вы можете проверить тянуть запрос Вот, который также содержит ссылки на сообщаемые проблемы и другую справочную информацию.

Мой пул-запрос был объединен, поэтому вы должны обновить Laravel 5 до последней версии, и проблема должна быть исправлена.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]