非常に単純なものが欠けているように感じます。これは非常に単純なタスクです。私がやりたいのは、次のようなものを取得することだけです。
SELECT * FROM lookup_items
JOIN lookup ON lookup_items.lookup_id = lookup.id
これにより、結合されたすべてのテーブルのすべての列が通常の SQL で返されます。これがzf2での私の試みです:
$select = new Select();
$select->from('lookup_items');
$select->join('lookup', 'lookup_items.lookup_id = lookup.id');
結果セットには、「lookup_items」の列のみが含まれます。「ルックアップ」列を取得するために、次のようなさまざまな方法を試しました。
$select->columns(array('lookup_items.*', 'lookup.*'));
しかし、それらはすべて爆発するだけです。確かにこれを行う方法はありますが、それはとても簡単なので、完全に見逃しています。
混乱を避けるための簡単な例だと思いましたが、さらにコードを次に示します。
class LookupItemsTable extends AbstractTableGateway
{
public function getList($resource)
{
$system_name = str_replace('*', '%', strtoupper($resource));
$joinTable = 'lookup';
$select = new Select();
$select->from($this->table);
$select->join($joinTable, "{$this->table}.lookup_id = {$joinTable}.id");
$where = array();
$where[] = "{$this->table}.enabled is true";
$where[] = "{$joinTable}.enabled is true";
$where[] = "UPPER({$joinTable}.system_name) ilike '{$system_name}'";
$select->where($where);
$sort[] = 'sort_order ASC';
$sort[] = 'value ASC';
$select->order($sort);
$rowset = $this->selectWith($select);
return $rowset;
}
}
どこ:
$resource = $this->params()->fromRoute('resource', 'BUSINESS');
$this->table は 'lookup_items' です。本当にやりたいことは、結合された両方のテーブルから列を取得することだけです。OO ファルデラルをすべて使用せずにストレートな SQL ステートメントを作成する zf2 の方法があると思うので、そのように強制することができます。しかし、私はできる限り枠組みの中で働きたいと思っています。