Не могу установить новое значение для свойства Model - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь установить новое значение для свойства Model, но оно не работает. Я использую dd () сразу после установки нового значения, но оно сохраняет старое значение.

$business->users()
    ->where('userable_id', $business->id)
    ->where('userable_type', 'App\Models\Business')
    ->first()->first_name = "New";

Ответы [ 3 ]

7 голосов
/ 20 мая 2019

Попробуйте вместо этого:

$business->users()
    ->where('userable_id', $business->id)
    ->where('userable_type', 'App\Models\Business')
    ->first()->update(['first_name' => "New"]);

Прямое назначение свойства объекта, например $model->attribute = 'foo';, влияет только на состояние в памяти и не вносит изменений в базу данных.

Итак, вы хотитеперейти либо

$model->update(['attribute' => 'value']);

или

$model->attribute = 'value';
$model->save();

Ссылка


Обновление 1:

, как янаписано в комментариях к моему ответу, first() может возвращать null иногда, если ни одна модель не была найдена.Вместо этого я бы посоветовал firstOrFail().

Обратите внимание, что нет предопределенного обработчика для ModelNotFound исключение (выбрасывается firstOrFail()),так что вы бы хотели обработать такую ​​ошибку вручную в классе Handler, в противном случае вы получите страницу 404 Laravel по умолчанию.

2 голосов
/ 20 мая 2019
$business->users()
    ->where('userable_id', $business->id)
    ->where('userable_type', 'App\Models\Business')
    ->first()->update(['first_name' => 'New']);
0 голосов
/ 20 мая 2019

Доступ к методу / полю сразу после метода ->first() является очень плохой практикой.

Если модель не найдена, PHP выдаст ошибку, потому что вы пытаетесь получить доступ к методу / свойству вnull значение.

Использовать вместо

$user = $business->users()
    ->where('userable_id', $business->id)
    ->where('userable_type', 'App\Models\Business')
    ->first();
$user->first_name = 'New';
$user->save();

// or, if 'first_name' is in your model $fillable array
$user->update(['first_name' => 'new' ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...