2014-07-01 38 views
0

我正在使用CakePHP 2.3.8並試圖查找尚未配置選項的用戶。如果沒有找到用戶1中選擇表項,則該用戶應選擇Cakephp不存在表條目的搜索條件

的表格

users 
id | username |  password  |category_id |  registration_date  


options 
id | user_id | display_email | allow_contact 

用戶不必在選擇表進行輸入。我想要做的是找到在選項表中沒有條目的所有用戶。

$this->paginate = array(
         'conditions' => array(
          'User.category_id' => $category_id, 
          //condition if the options table entry for the user is not set 
         ), 
         'joins' => array(
          array(
           'table' => 'options', 
           'alias' => 'Option', 
           'type' => 'inner', 
           'conditions' => array(
             'Option.user_id' => 'User.id' 
           ) 
          ) 
         ) 
        ) 

回答

1

首先將您的連接類型更改爲左側。這會讓你的所有用戶,甚至那些沒有選擇的用戶。內部連接只會讓那些有選項的用戶 - 幾乎與你想要的相反。

然後添加一個條件來查找Option.id爲空的行。沒有與它們關聯的選項的用戶對於來自Option的所有列都將爲空。

$this->paginate = array(
     'conditions' => array(
       'User.category_id' => $category_id, 
       'Option.id' => null 
     ), 
     'joins' => array(
       array(
        'table' => 'options', 
        'alias' => 'Option', 
        'type' => 'left', 
        'conditions' => array(
          'Option.user_id' => 'User.id' 
        ) 
       ) 
     ) 
); 
+0

謝謝,工作完美。我很尷尬地承認,但對內/左/右連接並不確定。我已閱讀過有關它們的內容,但我並沒有完全明白它們之間的差異。 – user3476345

+0

這張圖片幫助我理解他們http://i.stack.imgur.com/66zgg.png - 每個圓圈代表兩個關聯表格之一的結果集合。圓圈相交的位置是表A中那些也有表B中與它們相關的數據的行。紅色是您試圖通過查詢獲得的那部分表。 – Kai