Laravel Eloquent — возникают проблемы с обновлением col JSON в PostgreSQL

Часть 1: Главный вопрос

На моем colours_tab таблица (PostgreSQL 9.6), у меня есть столбец с именем colours_json_col типа JSONB.
У меня есть следующий код в моем контроллере Laravel, который создает новую запись в вышеупомянутой таблице:

$colour_rec = new ColoursModel();
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ];
$colour_rec -> update (['colours_json_col->fruits->apple' => 'green']);
$colour_rec -> saveOrFail();

Приведенный выше код не выдает ошибку и не создает исключение, однако после его выполнения новая запись в моей базе данных содержит следующие данные JSON:

{"fruits": {"apple": "pink"}}

Очевидно, что я хочу, чтобы яблоко было зеленым, а не розовым! Документация здесь (https://laravel.com/docs/5.5/queries#updates) предполагает, что я делаю правильные вещи, чтобы установить «зеленый». Кто-нибудь может увидеть, что я делаю не так?

Часть 2: Бонусный вопрос

Чтобы не допустить ошибок в приведенном выше коде, я должен был объявить столбец colours_json_col как $fillable в модели:

protected $fillable = ['colours_json_col'];

Я не хочу устанавливать столбец как $fillable если вообще возможно. Таким образом, есть ли способ обновить значение, не вызывая update() функционировать?

1

Решение

Отвечая на обе части вопроса в одном:

$colour_rec = new ColoursModel();
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ];
$colour_rec -> setAttribute ('colours_json_col->fruits->apple', 'green');
$colour_rec -> saveOrFail();

Насколько я могу судить, в Eloquent это недокументированная функция.

1

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

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

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