迭代不返回所有值CakePhp

迭代不返回所有值CakePhp,cakephp,foreach,cakephp-3.0,Cakephp,Foreach,Cakephp 3.0,我正在尝试获得一个帐户正在跟踪的用户的所有帖子。我有一个查询,检查当前用户在跟踪谁,该查询工作正常(返回所有值|下面的代码) 问题是当我尝试获取帖子时,我只获得一个用户的帖子。有什么问题的建议吗 $all_posts_following = NULL; foreach($all_following as $follower) { $postsTable=TableRegistry::get('Posts'); $a

我正在尝试获得一个帐户正在跟踪的用户的所有帖子。我有一个查询,检查当前用户在跟踪谁,该查询工作正常(返回所有值|下面的代码)

问题是当我尝试获取帖子时,我只获得一个用户的帖子。有什么问题的建议吗

$all_posts_following = NULL;

        foreach($all_following as $follower)
        {
            $postsTable=TableRegistry::get('Posts');
            $all_posts_following = $postsTable->find('all')->where(['Posts.user_fk' => $follower[('followed_fk')]])->toArray();
        }

        $this->set("all_posts_following",$all_posts_following); 

您正在覆盖之前分配给
所有帖子的值

如果要附加到数组,请使用
array\u merge

    $all_posts_following = [];
    $postsTable = TableRegistry::get('Posts');
    foreach($all_following as $follower)
    {
        $posts = $postsTable->find('all')->where(['Posts.user_fk' => $follower[('followed_fk')]])->toArray();
        $all_posts_following = array_merge($all_posts_following, $posts);
    }

    $this->set("all_posts_following",$all_posts_following); 
或者,您可以使用
IN
操作符查询所有匹配项

    $postsTable = TableRegistry::get('Posts');
    $all_posts_following = $postsTable->find('all')
       ->where(['
           Posts.user_fk IN' => $all_following
    ])->toArray();
请记住,当您调用
toArray()
时,MySQL驱动程序会在将所有记录发送到视图之前将其读取到内存中。如果您知道只需要迭代(循环)记录,那么将查询传递给视图,并在
foreach
中使用它

    $postsTable = TableRegistry::get('Posts');
    $all_posts_following = $postsTable->find('all')
       ->where(['
           Posts.user_fk IN' => $all_following
    ])->toArray();