2010-08-05 27 views
0

Je veux générer l'instruction SQL suivante:Zend Framework: Comment puis-je 'auto' génère une requête SQL correctement

SELECT `rc`.*, `c`.`name` FROM `RunConfigurations` AS `rc` INNER JOIN `Clients` AS `c` ON rc.client_id = c.id WHERE (rc.client_id = ?) ORDER BY `rc`.`config_name` ASC 

Cependant, je reçois:

SELECT `rc`.*, `c`.* FROM `RunConfigurations` AS `rc` INNER JOIN `Clients` AS `c` ON rc.client_id = c.id WHERE (rc.client_id = ?) ORDER BY `rc`.`config_name` ASC 

La différence est que je veux c.name , non c.*
En utilisant le code suivant ZF PHP:

public function fetchConfigurations($clientId = null, $order = 'rc.config_name ASC') 
    { 
     $db = $this->getDb(); 
     $stmt = $db->select() 
       ->from(array('rc' => 'RunConfigurations','c.name')) 
       ->join(array('c' => 'Clients'),'rc.client_id = c.id') 
       ->order($order); 

     if(is_numeric($clientId)) 
     { 
      $stmt->where('rc.client_id = ?') 
       ->bind(array($clientId)); 
     } 

     $results = $db->fetchAll($stmt); 
     if(sizeof($results) > 0) 
     { 
      $configs = array(); 
      foreach($results as $row) 
      { 
       $configs[] = $this->createRunConfigurationFromRow($row); 
      } 
      return $configs; 
     } 
     else 
     { 
      die($stmt->__toString()); 
      return null; 
     } 
    } 

Ceci est aggravante et je me sens comme je manque quelque chose soit:

->from(array('rc' => 'RunConfigurations','c.name')) 

ou

->join(array('c' => 'Clients'),'rc.client_id = c.id') 

et les exemples ne sont pas ZF faire la lumière sur ce point.

Répondre

1

Vous êtes si proche! join() a en fait un 3ème paramètre dans lequel vous pouvez fournir les noms de colonne comme le 2ème paramètre de from().

Cela signifie que ->join(array('c' => 'Clients'),'rc.client_id = c.id',array('name')) devrait générer le SQL que vous recherchez.

- Citation de la Zend Framework manual:

Le troisième argument de jointure() est un tableau de noms de colonnes, comme celui utilisé dans le procédé de(). Il est par défaut à "*", prend en charge les noms de corrélation, les expressions et Zend_Db_Expr de la même manière que le tableau de noms de colonnes dans la méthode from().