如何循环收集而不在每个项目内部循环?

时间:2019-03-23 12:49:48

标签: laravel loops collections

我有一个收藏。我想为每个项目添加一个新属性[用户]。当我使用map函数或者甚至foreach循环收集时,我注意到,代码在每个项目内部循环。因此,将读取集合项中的每个属性。请查看以下

   Log $myCollection: 
    local.INFO: Illuminate\Support\Collection Object
    (
        [items:protected] => Array
            (
                [0] => Array
                    (
                        [id] => 6
                        [name] => AAAAA
                        [code] => D2
                        [component_id] => 5
                    )

                [1] => Array
                    (
                        [id] => 7
                        [name] => BBBB
                        [code] => D1
                        [component_id] => 5
                    )

                [2] => Array
                    (
                        [id] => 47
                        [name] => CCCC
                        [code] => CR7
                        [component_id] => 3
                    )

                [3] => Array
                    (
                        [id] => 48
                        [name] => DDDD
                        [code] => CJ9
                        [component_id] => 3
                    )
            )
    )



    $myCollection->map(function ($item) use($users, $role) {
        $item = Site::findOrFail($item);
        $item->users = $users;
        return $item;
    });

我得到:         SQLSTATE [22P02]:无效的文本表示形式:7错误:整数:“ AAAA”的输入语法无效。我认为这是因为代码在myCollection的每个项目的名称上循环。

请问我该如何解决?谢谢

1 个答案:

答案 0 :(得分:0)

$item包含集合的每个对象,因此您应该使用适当的键。

$myCollection->map(function ($item) use($users, $role) {
   $item = Site::findOrFail($item->id); // or $item['id']
   $item->users = $users;
   return $item;
});

实际上,我现在对它的观察更好,您根本不需要再次找到该物品。因此,在您的关闭中,仅需这两行即可。

$item->users = $users;
return $item;