2010-08-05 113 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。