Я пытаюсь сделать это:
$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
и он возвращает модель.
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 до последней версии, и проблема должна быть исправлена.
Других решений пока нет …