Zend_DB_Select:为什么返回所有字段?

时间:2009-08-16 07:58:52

标签: zend-framework select zend-db

public function getWorksheetData($id) {

/** create the following query using select object:

    SELECT wc.label, wd.notes FROM worksheet_data wd
    LEFT JOIN worksheet_columns wc ON wd.column_id = wc.id;

*/
    $id = (int) $id;

    $select = $this->_db->select()
    ->from(array('wd'=>'worksheet_data'),
            array('wc.label','wd.notes'))
    ->join(array('wc'=>'worksheet_columns','wd.column_id = wc.id'))
    ->where("wd.id = :worksheet_id");

    $results = $this->_db->fetchAll($select, array('worksheet_id' => $id),Zend_Db::FETCH_ASSOC);


    return array('results'=>$results);

}

为什么此查询成为:

SELECT wclabelwdnoteswc。* FROM worksheet_data AS wd INNER JOIN { {1}} AS worksheet_columns WHERE(wd.id =:worksheet_id)

并返回wc。*?

1 个答案:

答案 0 :(得分:3)

你需要将一个空数组作为join方法的第三个参数,连接条件也不应该是第一个参数的数组的一部分,而是作为第二个参数(你会注意到没有连接条件)在你的查询中)。加入需要至少前两个参数,这是方法签名:

  

加入(table,join,[columns])

将其应用于您的加入方法:

->join(array('wc'=>'worksheet_columns'),'wd.column_id = wc.id', array())

这样:

$select = $this->_db->select()
        ->from(array('wd'=>'worksheet_data'),
                        array('wc.label','wd.notes'))
        ->join(array('wc'=>'worksheet_columns'),'wd.column_id = wc.id', array())
        ->where("wd.id = :worksheet_id");

给出输出:

SELECT `wc`.`label`, `wd`.`notes` FROM `worksheet_data` AS `wd` INNER JOIN `worksheet_columns` AS `wc` ON wd.column_id = wc.id WHERE (wd.id = :worksheet_id)

manual说:

  

要从表中选择无列,请使用   列表的空数组   列。