2010-11-09 18 views
1

Je rencontre un problème lorsque je construis une requête ORM basée sur plusieurs conditions à partir d'un $ _POST. La requête finale semble très bien et renvoie les enregistrements dans une requête SQL directe (phpmyadmin) mais dans mon application ne renvoie aucun enregistrement. voici le code ...Kohana ORM count_all() fonctionnant mais find_all() n'est pas

 $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 est faux. Si je change le find_all() avec count_all() j'obtiens un compte précis.

des échantillons de données dans le $ _POST Je cette requête dans $ Records-> 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 

cela renvoie 4 enregistrements dans phpmyadmin et (4) pour count_all(). Je ne comprends pas pourquoi cela se passe. Toute idée serait utile. Je vous remercie.

Répondre

2

Dans votre dernière ligne vous devriez avoir

$records = $records->find_all(); 

au lieu de

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

cela a fonctionné parfaitement. Je vous remercie. Je tirais mes cheveux par-dessus. – DewBoy3d

0

$records est un Database_Result et n'a pas de propriété loaded. Utilisez count($records) ou répétez-le avec l'instruction foreach pour obtenir des objets ORM.

0

Juste une remarque: Il est probablement préférable de ne pas effacer l'objet ORM (résultats $ = $ Records-> find_all() au lieu de $ records = $ records-> find_all()) si vous souhaitez utiliser $ records-> count_all() ou d'autres appels plus tard dans votre code. Juste un problème que j'ai rencontré.

+0

'$ results-> count()';) – AmazingDreams