ホームページ  >  記事  >  php教程  >  Zend Framework 2.0 (zf2) の高度なデータベース操作

Zend Framework 2.0 (zf2) の高度なデータベース操作

WBOY
WBOYオリジナル
2016-06-21 08:51:25912ブラウズ

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

元のアドレス: http://avnpc.com/pages/advanced-database-select-usage-in-zf2



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。