@GrimJack

Почему не работает json поле?

Есть модель с указанным полем
protected $casts = [
        'properties' => 'object'
    ];

В бд в таблице users есть json поле properties
Не могу понять как в нем хранить данные и работать с ним.
Например установить роль:
$user = User::find(1);
        $user->properties->role = 'admin';
        $user->save();

Приведет к
Indirect modification of overloaded property App\User::$properties has no effect

Если поменять на array и properties['role'] то эффект тот же
Как правильно это поле обновлять и заполнять при insert/create?
  • Вопрос задан
  • 330 просмотров
Пригласить эксперта
Ответы на вопрос 2
@miki131
$user->properties это magic __get, который возвращает новый объект, поэтому его изменения не затронут саму модель.
Исходный код
$user = User::find(1);

$temp = $user->properties;
$temp->role = 'admin';

$user->properties = $temp;
$user->save();
Ответ написан
Комментировать
profesor08
@profesor08
А ты уверен, что json данные конвертировались из строки в json?

Или может быть вот это: https://laravel.io/forum/06-10-2014-indirect-modif... ?

И вообще, избавься от магии в своем классе, от всяких _get и _set.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы