2014-02-18 14 views
0

我有組模型和用戶模型。CakePHP:查找「組」,其中該組的「成員」不是當前授權用戶

羣組擁有並屬於許多用戶。 用戶擁有並屬於許多組。

我正在嘗試創建組用戶的結果集,其中組用戶不包括當前登錄用戶的ID。我試圖在「包含」參數中使用條件,我嘗試使用內部連接來完成它,但結果總是會出現用戶當前所屬的組。

做我自己的自定義MySQL查詢的時候,我想知道是否有一種方法可以獨自使用CakePHP模型。什麼我都試過

例子:

$otherMatches = $this->Group->find('all', array('joins' => array(array('table' => 'cake_users_groups', 'alias' => 'GroupsUsers', 'type' => 'inner', 'conditions' => array('GroupsUsers.group_id !=' => $groupId, 'GroupsUsers.user_id !=' => $this->Auth->user('id')))), 'limit' => 10, 'order' => array('rand()'))); 

$otherMatches = $this->Group->find('all', array(
    'contain' => array(
     'User' => array(
      'UsersGroup' => array(
       'conditions' => array('UsersGroup.user_id !=' => $this->Auth->user('id)); 
      ) 
     ) 
    ) 
), 'limit' => 10, 'order' => array('rand()'))); 

任何人都可以給我什麼建議?

在此先感謝。

+0

你只需要組或組和用戶?你僅限於1個查詢嗎? – Eagle

+0

只有團隊纔會做得很好。如果有可能獲得用戶信息與該組,那麼這將是好的,但沒有必要。不一定只限於一個查詢,但希望儘可能使代碼儘可能少。 – user1853113

+0

似乎子查詢應該是要走的路。由於Cake 2.x中沒有子查詢,所以可能最快和最少的「令人頭痛的」答案將是做2個查詢 – Eagle

回答

0

使用子查詢解決它:

$conditionsSubQuery['`UsersGroup`.`user_id`'] = $this->Auth->user('id'); 

    $db = $this->UsersGroup->getDataSource(); 
    $subQuery = $db->buildStatement(
      array(
       'fields'  => array('`UsersGroup`.`group_id`'), 
       'table'  => $db->fullTableName($this->UsersGroup), 
       'alias'  => 'UsersGroup', 
       'limit'  => null, 
       'offset'  => null, 
       'joins'  => array(), 
       'conditions' => $conditionsSubQuery, 
       'order'  => null, 
       'group'  => null 
      ), 
      $this->UsersGroup 
     ); 
     $subQuery = ' `Group`.`id` NOT IN (' . $subQuery . ') ORDER BY RAND() LIMIT 10 '; 
     $subQueryExpression = $db->expression($subQuery); 

     $conditions[] = $subQueryExpression; 

     $otherMatches = $this->Group->find('all', compact('conditions')); 
相關問題