2014-05-09 95 views
1

我正在嘗試返回與我擁有的一組條件匹配的所有記錄。目前我可以讓我的代碼工作,但不是返回所有匹配我已經通過的條件數組的記錄,而是返回第一個,然後停止,而不是我知道存在於表中的四個我'訪問。這是與爲查找設置的所有參數。使用CakePHP查找返回與條件數組匹配的所有記錄

這裏有一個更好的視圖代碼片段:

  $array = implode(',', array('1','2','3','4')); 

      $a = $this->Assets->find('all', array(
       'conditions' => array(
        'id' => $array 
        ) 
       ) 
      ); 

      var_dump($a); 

var_dumping $一個只會提供具有ID爲1的記錄,當有這2,3,4也同樣存在記錄。

+1

你爲什麼要爆的陣列? Cake應該將'array('conditions'=> array('id'=> array(1,2,3,4)))'轉換爲'WHERE id IN(1,2,3,4)'你應該檢查一下查詢Cake正在生成。 – Kai

+0

@kai被用於在SQL中執行IN語句的字符串,認爲它可能是相同的事情,但不要猜測。 – canadiancreed

回答

4

這是預期的結果。

您正在使用ORM的自動魔法。傳遞字符串將導致相等比較,即WHERE x = y,並且由於id很可能是整數,因此投射會將字符串1,2,3,4轉換爲1,因此最終條件將爲WHERE id = 1

您應該通過陣列代替

'conditions' => array(
    'id' => array(1, 2, 3, 4) 
) 

這樣的ORM會產生IN條件,即WHERE id IN (1,2,3,4)

這也記錄在食譜:
http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions

相關問題