2017-12-17 19 views
1

私は、アカウントがフォローしているユーザーのすべての投稿を取得しようとしています。私は現在のユーザーがうまく動作しているかどうかを確認するクエリを持っています(下のすべての値|コードを返します)。反復ですべての値が返されないCakePhp

問題は、私が投稿を取得しようとすると、私は1人のユーザーの投稿を取得します。何が問題になっているかもしれないかについてのご意見はありますか?

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

答えて

1

あなたは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(); 

あなたはすべてのレコードがビューに送信される前に、メモリにMySQLドライバによって読み取られtoArray()を呼び出したときにことを覚えておいてください。レコードを繰り返し処理(ループ)するだけであれば、クエリをビューに渡してforeachに使用します。

関連する問題