2012-08-12 94 views
0

我知道這是一個古老的quastion,但我似乎無法讓它工作。如何在hasMany關聯中使用CakePHP 2查找?

我有這方面的關係:
用戶的hasMany負責
責任屬於關聯用戶

我需要,通過我的用戶模型,執行找到這樣:

$users = $this->User->find('all', array('conditions' => array('Responsible.email' => $responsible_email)); 

但這韓元」 t工作,它會拋出一個「未知列'Responsible.email'在哪裏clouse」。

我真正的代碼是這樣的:

$conditions = array(); 

    if (!empty($params['filter_by_name'])) { 
     $conditions[] .= "LOWER(CONCAT(Profile.name, ' ', Profile.surname)) LIKE '%".$params['filter_by_name']."%'"; 
    } 

    if (!empty($params['filter_by_email'])) { 
     $conditions[] .= "LOWER(User.email) = '".$params['filter_by_email']."'"; 
    } 

    if (!empty($params['filter_by_responsible_email'])) { 
     $conditions[] .= "LOWER(Responsible.email) = '".$params['filter_by_responsible_email']."'"; 
    } 

    $results = $this->User->find('all', array('conditions' => $conditions)); 

我已搜查,並在許多方面嘗試過,但我不能讓它工作,我該怎麼辦呢?

編輯:

我能夠做到這一點與中容納,但它也將返回用戶與空...負責

+0

從我記得你應該可以做一個$ this-> User-> Responsible-> findAllByEmail($ responsible_email);你應該得到一個用戶的答案 – 2012-08-13 00:32:42

+0

它應該工作,如果你設置'$ this-> User-> recursive = 1;'查詢之前,假設你的關聯設置正確,但它可能會更好使用可容納的。 – 2012-08-13 00:34:36

+0

@DavidGallagher它不起作用,因爲當您在hasMany關係中搜索時Cake不會執行聯接 – 2012-08-13 00:37:46

回答

1

答對了:

 $options['joins'] = array(
      array(
       'table' => 'responsibles', 
       'alias' => 'Responsible', 
       'type' => 'INNER', 
       'conditions' => array("User.id = Responsible.user_id") 
      ) 
     ); 

     $conditions[] .= "Responsible.email = '".$params['filter_by_responsible_email']."'"; 

     $options['conditions'] = $conditions; 

     $results = $this->User->find('all', $options); 

效果很好:)

相關問題