2013-11-26 30 views
1

我做了find('all')一個相當複雜的條件:CakePHP的:如何當有多個相關記錄指定返回的字段

array(
    'conditions' => array(
     (int) 0 => 'Attempt.test_id = 8', 
     (int) 1 => 'Attempt.score > 60', 
     (int) 2 => array(), 
     (int) 3 => array(
      (int) 0 => 'Resume.has_file = 1' 
     ) 
    ), 
    'joins' => array(
     (int) 0 => array(
      'table' => 'attempts', 
      'alias' => 'Attempt', 
      'type' => 'LEFT', 
      'conditions' => array(
       (int) 0 => 'Attempt.user_id = User.id AND Attempt.test_id != 5' 
      ) 
     ) 
    ), 
    'contain' => array(
     (int) 0 => 'Resume', 
     (int) 1 => 'Attempt', 
     (int) 2 => 'Tag' 
    ), 
    'group' => 'User.id', 
    'limit' => (int) 1, 
    'fields' => array(
     (int) 0 => 'User.id', 
     (int) 1 => 'Resume.id' 
    ) 
) 

返回的數據是這樣的:

array(
    (int) 0 => array(
     'User' => array(
      'id' => '381' 
     ), 
     'Resume' => array(
      'id' => '15' 
     ), 
     'Attempt' => array(
      (int) 0 => array(
       'id' => '16072', 
       'user_id' => '381', 
       'test_id' => '8', 
       'status' => 'complete' 
      ), 
      (int) 2 => array(
       'id' => '16073', 
       'user_id' => '381', 
       'test_id' => '8', 
       'status' => 'complete' 
      ) 

查詢是永久運行,需要一天運行,我只需要User.id,所以我試圖去掉不需要的字段。它適用於hasOne關聯,但hasMany與文檔中的語法不匹配。例如,'limit'=>array('Attempt.id')會拋出錯誤,因爲沒有$ user ['Attempt'] ['id']。相反,它是$ user ['Attempt'] [#] ['id']。

我該怎麼做?我也很想聽聽任何其他的建議,這將加快這個查詢。

回答

0

好吧,這裏是我會做什麼。

第一,我看,你只需要User.id,不過我看你,你是在含有添加更多的關聯,因此我會刪除「標籤」。

我看到您正在執行左側類型的手動連接,這是CakePHP默認使用的,是的,我看到您在那裏設置了一個附加條件,即使它沒有任何問題,我會簡單地綁定嘗試模型與上述條件相同,即

$this->User->unbindModel(array('hasMany' => array('Attempt'))); 
//I dont know if its a hasMany, I just assumed that 
$this->User->bindMode(array('hasMany'=> array(
    'Attempt' => array('conditions' => array('Attempt.test_id <>' => 5))))); 

重複使用簡歷模型。

我看你是分組的,但我沒有看到任何聚合函數,你爲什麼分組在那裏?你需要什麼?它可以用Hash :: extrat()解決嗎?

另一件事來看看:直接在數據庫控制檯運行查詢,看看是否有指標,可以幫助你。

最後,我不知道你的要求,但要兩個條件(在嘗試和恢復模型)來滿足?如果是這樣的話,那麼你需要「內連接」

+0

謝謝吉列爾莫。我應該澄清,即使這個查詢在標籤模型上沒有任何條件,他們中的許多人都會。所以我無法擺脫那個或任何關聯。 – emersonthis

+0

好吧,也許如果你告訴我們這個完整的條件以及你需要從這個查詢中得到什麼,我們可以更好地幫助你。 –

+0

這些是完整的條件集。我只需要獲取User.id.所有其他內容只是過濾器。各種條件引用這些表格。 – emersonthis

相關問題