【问题标题】:Zend Framework: How Do I 'auto' generate a SQL query correctlyZend Framework:如何正确“自动”生成 SQL 查询
【发布时间】:2010-08-05 22:05:37
【问题描述】:

我要生成如下 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 的例子并没有说明这一点。

【问题讨论】:

    标签: php zend-framework zend-db zend-db-table zend-db-select


    【解决方案1】:

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

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

    --引用Zend Framework manual:

    join() 的第三个参数是一个列名数组,就像在 from() 方法中使用的那样。默认为“*”,支持关联名、表达式、Zend_Db_Expr,方式与from()方法中的列名数组相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多