我有一个列表集合,每个列表都有一个项目数组。我需要在每个列表上按id对项目进行分组。
当我尝试重新分配$list-〉items时,什么都没有发生,但是如果我重新分配$list-〉name,它就起作用了,所以问题是对象的数组或数组属性,或者类似的东西...
要重新指派集合内的数组,我必须执行什麽动作?
$lists = Listt::with('items')->get();
$newLists = $lists->map(function(Listt $list) {
// $list->items = $list->items->groupBy('id'); // this is what I want, it doesn't work
// $list->items = []; // this doesn't work either
// $list['items'] = []; // nope
// $list->items = new Collection(); // nope
$list->items = collect([... $list->items])->groupBy('id');// nope
$list->name = 'test'; //this works, so the problem is arrays <----
return $list;
});
return $newLists;
/* transform doesn't work */
// $lists->transform(function(Listt $list) {
//...
// });
// return $lists;
/* this, from a similar question, doesn't work either, besides I don't understand it and it doesn't use collection methods... */
// foreach($lists as &$list){
// $list['items'] = [];
// unset($list);
// }
// return $lists;
1条答案
按热度按时间fhg3lkii1#
因为
items
已经是一个关系,所以我并不想将其作为属性重用。我建议您在每个列表上为分组依据项分配一个新属性。我将其命名为
grouped_items
:如果您坚持要指派给项目,您仍然可以这样做,但我不建议这样做: