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

違いは、次の ZF PHP コードを使用するのc.nameではなく、I want です。c.*

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()実際には3番目のパラメーターがあり、からの2番目のパラメーターと同じように列名を指定できますfrom()

これは->join(array('c' => 'Clients'),'rc.client_id = c.id',array('name'))、探しているSQLを生成する必要があることを意味します。

--Zend Frameworkマニュアルからの引用:

join()の3番目の引数は、from()メソッドで使用されるような列名の配列です。デフォルトは「*」で、from()メソッドの列名の配列と同じ方法で、相関名、式、およびZend_Db_Exprをサポートします。

于 2010-08-05T22:15:50.017 に答える