0

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

4

1 回答 1

1

你是如此接近!join()实际上有一个第三个参数,您可以在其中提供列名,就像来自from().

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

-- 引用Zend Framework 手册

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

于 2010-08-05T22:15:50.017 回答