2009-12-11 3 views
1

J'ai un appel à un modèle qui est juste une classe standard (ne pas étendre zend_db_table). Je fais un select et je veux avoir la possibilité d'exclure un ensemble d'identifiants qui serait transmis en tant que variable.L'adaptateur zend_db n'est pas dans/zend_db_expr

Je curently les éléments suivants:

public function getItemsBySection($section, $excluded_ids=null){ 
    //handle this as special case (although only case at this point) 

    if(is_array($excluded_ids) and count($excluded_ids)>0){ 
     $x=1; 
     foreach($excluded_ids as $key=>$value){ 
      if($x==1){ 
       $not_in=$value; 
      }else{ 
       $not_in.=','.$value; 
      } 
      $x++; 
     } 
    } 

    if($section=='feed_supplies'){ 
     $sql='select * from items where is_feed_supply=1'; 
     if($not_in){ 
      $sql.=' and id not in ('.$not_in.')'; 
     } 
    } 

    echo $sql . '<br/>'; 

    $results=$this->_db->fetchAll($sql); 

mais je me demandais s'il y a un moyen d'utiliser Zend_Db_Expr ou une autre concstruct pour gérer l'exclusion de certains éléments? Je ne suis pas un gestionnaire d'erreur comme si c'est un entier etc ...

Personnellement, je ne suis pas très fan de la syntaxe de zend_db_select mais je pourrais être persuadé s'il corrige des choses comme ça (je veux voir Doctrine2).

grâce

Répondre

1

Je ne suis pas sûr de l'utilisation Zend_Db_Expr, mais vous n'avez pas besoin de cette première boucle du tout pour construire votre $ NOT_IN valeur.

$not_in = implode(',', $excluded_ids); 
+0

convenu - je pense que je venais d'écrire une boucle foreach et juste sorti chemin - ranges-certainement – timpone

4
$select = $db->select(); 
$select->from('items') 
     ->where('is_feed_supply = ?',1) 
     ->where('id NOT IN (?)', $notInArray); 

Le $ notInArray sera implosé automatiquement AFAIK (au moins pour ints). Et puis

$yourSQL = $select->__toString(); 

roches Zend_Db_Select: D

Et BTW: Essayez de coller à codage standarts

+1

Sauf que Zend_Db_Select ne bouge pas puisque vous devez cocher $ notInArray n'est pas vide. Sinon, vous obtiendrez une erreur de syntaxe SQL ... Génial. – MaximeBernard

+0

Vous avez raison. Merci pour la clarification... –