迭代不返回所有值CakePhp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代不返回所有值CakePhp相关的知识,希望对你有一定的参考价值。

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

 $followersTable=TableRegistry::get('Followers');
 $all_following = $followersTable->find('all')->where(['follower_fk'=>$this->Auth->User('id')])->toArray();

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

$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); 
答案

您正在覆盖分配给all_posts_following的先前值。

如果要追加到数组,请使用array_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中使用它。

以上是关于迭代不返回所有值CakePhp的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django视图中使用for循环返回每次迭代[关闭]

cakephp 保存返回 true 但不保存

cakephp beforsave - 密码返回随机值

迭代返回数组的值

cakePHP 准备好的语句不工作(获取所有不工作)

Firebase:snapshot.val 不是函数或其返回值不可迭代