2010-08-05 108 views
0

我想生成的SQL语句:Zend框架:我如何“自动”生成SQL查询正确

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 

但是我得到:

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 

的差异我想c.name ,不c.*
使用下面的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; 
     } 
    } 

这加重,我觉得我失去了一些东西在任:

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

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

和ZF例子不是这个脱落的任何光线。

回答

1

你太亲近了! join()实际上有第三个参数,您可以在其中提供列名,就像从from()的第二个参数一样。

这将意味着->join(array('c' => 'Clients'),'rc.client_id = c.id',array('name'))应该生成您正在查找的SQL。

- 报价从Zend Framework manual

的第三个参数加入()是列名的阵列,像在从()方法中使用。它默认为“*”,以与from()方法中的列名数组相同的方式支持相关名称,表达式和Zend_Db_Expr。