2012-11-30 65 views
0

我有這方面的關係:CakePHP的包含過濾母公司模型值

出席所屬員工

計劃屬於員工

這一發現()工作得很好,以獲得一個日期的所有考勤記錄範圍。

$data = $this->Attendance->find('all', array(
     'contain' => array(
      'Employee' => array(
       'Schedule' => array(
        'conditions' => array('sche_status' => 1), 
        'order' => 'sche_valid DESC', 
        'limit' => 1 
      )) 
     ), 
     'conditions' => $conditions, 
     'order' => array('employee_id', 'att_date') 
      ) 
    ); 

然而,本附表條件

'conditions' => array('sche_status' => 1), 

獲得 「當前」 計劃。問題是僱員在日期範圍內有多個計劃。 爲了獲得相關時間表它的父考勤記錄,我還需要 條件對Attendance.att_date

試圖

'conditions' => array('sche_status' => 1, 'ho_valid <=' => Attendance.att_date) 

'conditions' => array('sche_status' => 1, 'ho_valid <=' => $this->Attendance.att_date) 

如何可以引用出席。來自contan Schedule條件的att_date?那可能嗎? 我目前的數據集非常乾淨,我的find()是乾的,不想在這裏弄得一團糟。

任何幫助非常感謝。

回答

0

當您使用contain()時,它會執行單獨的查詢。在你的例子中,它實際上會分別執行三個查詢,然後通過CakePHP將它們合併到返回的數據數組中。

因此,您不能使用來自不同模型的字段來對照包含的模型。

最好的辦法是先查詢字段,然後在此查找中使用它的值,或使用joins(),這將使所有結果從單個查詢返回而不是三個單獨的查詢。注意 - 看起來你是在Controller中建立這個查詢 - 遵循MVC結構,最好的做法是將ALL查詢保留在你的模型中,而不是你的控制器 - 然後調用模型的方法(其中有find() )從控制器檢索結果。

+0

謝謝@Dave;尚未使用蛋糕連接;將在這種情況下重新評估我的需求。最好的祝福。 –