Вызов метода undefined Illuminate\Database\Query\Builder:: save()
Я пытаюсь вызвать метод Eloquent save() в существующей записи, но получаю сообщение об ошибке из Illuminate Query Builder.
Следуя документации на веб-сайте Laravel по адресу http://laravel.com/docs/eloquent#insert-update-delete для обновления извлеченной модели, а также смотрите здесь пример: Laravel Eloquent ORM save: update vs create, мой код, похоже, соответствует ожидаемому соглашению, но вместо этого я получаю ошибку, упомянутую в заголовке этого сообщения.
$this->employee = Employee::where('login', $login);
$this->employee->first_name = 'John';
$this->employee->last_name = 'Doe';
$this->employee->save();
Класс Employee расширяет Eloquent, и если я создаю новый экземпляр модели, а затем устанавливаю некоторые атрибуты, а затем вызывается метод save(), он выполняет инструкции вставки просто отлично. Что мне не хватает?
Ответы
Ответ 1
По-видимому, метод ->get()
не будет работать с методом Eloquent ->save()
, и вместо этого вы должны использовать ->first()
.
Правильно:
$this->employee = Employee::where('login', $login)->first();
Неправильно:
$this->employee = Employee::where('login', $login)->get();
Подробнее см. http://laravel.io/forum/06-04-2014-symfony-component-debug-exception-fatalerrorexception-call-to-undefined-method-illuminatedatabaseeloquentcollectionsave.
Ответ 2
вам нужно получить вашу модель после того, как задано → где
$this->employee = Employee::where('login', $login)->get();
или
$this->employee = Employee::where('login', $login)->first();
если вы не сделаете так, чтобы ваш объект $this- > employee был бы одним, и вы не могли бы использовать → save()