我有一个模型有一个属性被转换为数组,就像这样
protected $casts = [
'data' => 'array',
];
在返回 Collection 之前,我需要对数组进行修改。使用each
Collection 上的方法,我可以更改里面的属性。
$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->data 将使用魔术 __get()正在使用,所以我需要使用 setter。那么我该如何实现呢?
提前致谢。