zf2 は Zend1 のデータベース コンポーネントを完全に書き直しましたが、現在のマニュアルに示されている例は、次のように自分で整理することしかできません。
DBを操作する場合はTableGatewayを継承するのが望ましい方法です。例えば、操作が必要なpostsテーブルがある場合は以下のように新規クラスを作成します。
クラス Posts extends ZendDbTableGatewayTableGateway
{
}
このクラスをインスタンス化して、データベースに接続するために ZendDbAdapterAdapter に渡します。これは重要ではありません。インスタンス化された TableGateway が $postTable であると仮定すると、posts テーブルを次のように操作する必要があります。WHEREチェーン操作
zf2 が推奨するクエリ方法はチェーン操作です
$select = $postTable->getSql()->select();
$select->where('id > 5')->order('id DESC')->limit(10);
$resultSet = $postTable->selectWith($select);
$result = $resultSet->toArray();
WHERE クロージャー操作
zf2 はクロージャベースの操作もサポートしています。上記の例はクロージャ モードで次のように書き換えることができます。
$select = $postTable->getSql()->select();
$select->where(function($where){
$where->lessThan('id', 10);
$where->greaterThan('id', 5);
$where を返す;
})->order('id DESC')->limit(10);
WHERE および複合条件
where 条件が複合条件の場合は、次のように記述できます:
$select->where(
配列('id > 30')
)->where(
配列('id
);
次の SQL が生成されます
SELECT "posts".* FROM "posts" WHERE id > 30 AND id
WHERE OR 複合条件
Where クエリのデフォルトのリンクを AND に変更したい場合は、OR に変更したい場合は、次のように記述できます:
$select->where(
配列('id > 30')
)->where(
array('id < 10')、ZendDbSqlWhere::OP_OR
);
SQL:
SELECT "posts".* FROM "posts" WHERE id > 30 OR idこのように書いても効果は同じです。これは、マジック メソッド __call() によって実現されます。
$where = $select->where;
$where->lessThan('id', 10);
$where-> または;
$where->greaterThan('id', 30);
WHERE 複雑な条件
クエリ条件がさらに複雑な場合、次のようなクロージャ操作はチェーン操作よりも柔軟です。
$select->where(function($where){
$subWhereForId = クローン $where;
$subWhereForTitle = クローン $where;
$subWhereForId->lessThan('id', 10);
$subWhereForId->or;
$subWhereForId->greaterThan('id', 20);
$where->addPredicate($subWhereForId);
$subWhereForTitle->equalTo('title', 'a');
$subWhereForTitle->or;
$subWhereForTitle->equalTo('title', 'b');
$where->addPredicate($subWhereForTitle);
$where を返す;
});
SQL に相当
SELECT "posts".* FROM "posts" WHERE ("id" < '10' OR "id" > '20') AND ("title" = 'a' OR "title" = 'b' );
EvaEngine の改善
EvaEngine では、完全なチェーン操作を使用できます。最初の例は、EvaEngine で次のように記述できます。
$result = $postTable->where('id > 5')->order('id DESC')->limit(10)->find();