1
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_dataAS wdINNER JOIN worksheet_columnsAS wcWHERE(wd.id =:worksheet_id)

そしてwc。*を返しますか?

4

1 に答える 1

3

結合メソッドの3番目の引数として空の配列を配置する必要があります。また、結合条件は最初の引数の配列の一部ではなく、代わりに2番目の引数として配置する必要があります(クエリに結合条件がないことに気付くでしょう) )。結合には少なくとも最初の2つの引数が必要です。これは、メソッドのシグネチャです。

join(table、join、[columns])

それをjoinメソッドに適用します。

->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)

マニュアルには次のように書かれています。

テーブルから列を選択しない場合は、列のリストに空の配列を使用します。

于 2009-08-16T08:03:11.127 に答える