2017-09-29 3 views
0

私はUsersFollowersテーブルを持っています。 FollowersHasManyの関係を持ち、Usersとなります。つまり、どのユーザーも複数のフォロワーを持つことができます。CakePHP 2.x注文はHasManyテーブルレコードに基づいています

Array 
(
    [0] => Array 
     (
      [User] => Array 
       (
        [id] => 26 
        [seller_id_number] => 
        [facebook_id] => 
        [twitter_id] => 

       ) 



      [Followers] => Array 
       (
        [0] => Array 
         (
          [id] => 6 
          [user_id] => 2 
          [follower_id] => 26 
          [date_added] => 2017-09-22 03:58:21 
          [date_updated] => 2017-09-22 07:58:21 

           ) 

         ) 

        [1] => Array 
         (
          [id] => 7 
          [user_id] => 52 
          [follower_id] => 26 
          [date_added] => 2017-09-22 16:35:23 
          [date_updated] => 2017-09-22 20:35:23 


         ) 

         ) 
     ) 

私は(見つける)ユーザーとフォロワーのorder by最大数をページ付けする必要があります。

//$this->User->virtualFields['total_flw'] = 'COUNT(`User.Followers`)'; 

$this->paginate = array(
      'conditions' => array('User.user_status'     => 'user', 
       'User.soft_delete NOT' => 'on', 
        'User.status NOT' => 'inactive', 
        'User.id NOT'     => $this->Session->read('User.id'), 
       $conditions, 
      ), 
      'recursive' => 2, 
      //'order'  => 'total_flw desc', 
      'paramType' => 'querystring', 
      'limit'  => '24', 
      'maxLimit' => 100, 
     ); 
     $listing_searched_users = $this->paginate('User'); 

仮想フィールドを使用してみましたが、成功しませんでした。どんな助けもありがとう。

答えて

1

はあなたのクエリであなたのhasManyモデルに参加する必要があるとのpaginate検索のORDER BY一部でCOUNT()を実行します -

$this->paginate = [ 
    'joins' => [ 
     [ 
      'table' => 'followers', 
      'alias' => 'Follower', 
      'type' => 'LEFT', 
      'conditions' => 'Follower.user_id = User.id' 
     ] 
    ], 
    'group' => ['User.id'], 
    'order' => ['COUNT(User.id)' => 'DESC'] 
]; 

関係として、ここでは動作しません関連するモデルを含む一つでありますCakeは2つの別々のクエリを実行しなければならないことを意味します。なぜなら、私たちは代わりにjoinsを使用するからです。

関連する問題