2010-11-09 27 views
1

我遇到了一個問題,我正在根據$ _POST中的幾個條件構建一個ORM查詢。最後的查詢看起來很好,並在直接的SQL查詢(phpmyadmin)中返回記錄,但在我的應用程序中不返回任何記錄。這裏是代碼...Kohana ORM count_all()工作但find_all()不是

 $records = ORM::factory('record')->where(array('date >='=>$_POST['fromdate'],'date <='=>$_POST['todate'])); 
     if ($_POST['agent'] != '0') $records->where(array('ccp_id'=>$_POST['agent'])); 
     if ($_POST['supervisor'] != '0') { 
      $ccps = ORM::factory('employee')->where(array('supervisor_id'=>$_POST['supervisor'],'active'=>'1'))->find_all(); 
      foreach ($ccps as $ccp) { 
       $agents[] = $ccp->id; 
      } 
      // echo kohana::debug($agents); 
      $records->in('ccp_id',$agents); 
     } 
     if ($_POST['lead'] != '0') $records->where(array('lead_id'=>$_POST['lead'])); 
     if ($_POST['reasons'] != '[]') { 
      $reasons = explode(',',str_replace(array('[',']','"'),'',$_POST['reasons'])); 
      $records->in('reason_id',$reasons); 
     } 
     $records->find_all(); 

$ records-> loaded is false。如果我用count_all()更改find​​_all(),我會得到一個精確的計數。

隨着在$ _POST我在$紀錄─> last_query這個查詢()樣本數據

SELECT `records`.* 
FROM (`records`) 
WHERE `date` >= '2010-10-10' 
AND `date` <= '2010-11-09' 
AND `ccp_id` IN ('E128092','E128093','E124874','E124414','E129056','E137678','E078952','E112701','E084457','E098047','E099221','E001131','E120892') 
AND `lead_id` = 'E110873' 
AND `reason_id` IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24) 
ORDER BY `records`.`id` ASC 

這將返回在phpMyAdmin 4條和(4)count_all()。 我不明白爲什麼會發生這種情況。任何見解都會有所幫助。謝謝。

回答

2

在你的最後一行,你應該有

$records = $records->find_all(); 

,而不是

// this actually returns you the resultset and resets the query builder object 
$records->find_all() 
+0

這工作完美。謝謝。我正在把頭髮拉出來。 – DewBoy3d 2010-11-09 21:40:51

0

$recordsDatabase_Result並沒有loaded財產。使用count($records)或使用foreach語句迭代它以獲取ORM對象。

0

剛一說明:它可能最好不要消滅ORM對象($結果= $紀錄─> find_all ()而不是$ records = $ records-> find_all()),如果您希望稍後在代碼中使用$ records-> count_all()或其他調用。只是我遇到的一個問題。

+0

'$ results-> count()';) – AmazingDreams 2013-08-15 14:39:32