У меня есть модель с атрибутом, который передается в массив, например
protected $casts = [
'data' => 'array',
];
Мне нужно внести поправку в массив перед возвратом коллекции. Используя метод each
в коллекции, я могу внести изменения в атрибуты внутри.
$collection = $collection->each(function ($collection, $key) {
if ($collection->type == 'foo') {
$collection->type = 'bar';
}
});
Это работает, и Коллекция изменена. Однако мне нужно изменить массив в атрибуте cast.
$collection = $collection->each(function ($collection, $key) {
if ($collection->type == 'foo') {
foreach ($collection->data['x'] as $k => $v) {
$collection->data['x'][$k]['string'] = 'example';
}
}
});
Однако это возвращает ошибку.
Indirect modification of overloaded property App\Models\Block::$data has no effect
Я понимаю, что для доступа к данным $ collection-> будет использоваться магия __get(), поэтому мне нужно будет использовать установщик. Итак, как мне этого добиться?
Заранее спасибо.