я использую этот вставить данные в формате JSON в таблицу. Я хотел бы знать, можно ли изменить одно свойство объекта JSON после того, как он вставлен в таблицу с несколькими свойствами. Например:
Table:
+----+----------------------------------+
| id | car |
+----+----------------------------------+
| 1 | {"brand": "audi", "model": "TT"} |
+----+----------------------------------+
$entity = Table::where('id', 1);
$entity->car['model'] = 'Aicon';
Код, похожий на этот, дает мне исключение 'ErrorException' with message 'Indirect modification of overloaded property ... has no effect' in ...
,
Такой как в примере Дока Вы не можете, вы должны взять объект JSON (в виде массива), изменить его и затем вернуть обратно.
$entity = Table::where('id', 1);
$car = $entity->car;
$car['model'] = 'Aicon';
$entity->car = $car;
$entity->save();
Вы не можете напрямую изменить дочерний узел атрибута, поскольку он технически не существует в модели. Пролистайте несколько отметок в ссылке на документацию, которой вы поделились, и читайте дальше Аксессоры и мутаторы, в качестве альтернативы просто определите свойство правильно.
Если вы не хотите автоматически приводить JSON к массиву, как указывал @Thomas Edwards, вы можете определить мутатор, который, по сути, делает то же самое, но вы можете изменить его, как пожелаете:
public function getCarAttribute($value)
{
return json_decode($value, true);
}
Затем добавьте ваши новые атрибуты в измененное поле:
$entity = Entity::find(1);
$car = $entity->car;
$car['model'] = 'Aicon';
$car['color'] = 'Blue';
$entity->car = $car;
$entity->save();