laravel 如何在集合中重新分配数组?或者如何在集合中对数组进行分组?

0s7z1bwu  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(161)

我有一个列表集合,每个列表都有一个项目数组。我需要在每个列表上按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;
fhg3lkii

fhg3lkii1#

因为items已经是一个关系,所以我并不想将其作为属性重用。
我建议您在每个列表上为分组依据项分配一个新属性。我将其命名为grouped_items

return List::with('items')
    ->get()
    ->each(function ($list) {
        $list->grouped_items = $list->items->groupBy('id');
    });

如果您坚持要指派给项目,您仍然可以这样做,但我不建议这样做:

return List::with('items')
    ->get()
    ->each(function ($list) {
        $items = $list->items;

        // This step might not be necessary.
        $list->unsetRelation('items');

        $list->setRelation('items', $items->groupBy('id'));
    });

相关问题