nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

Criteria

SQLの条件指定に使うCriteriaの種類

メソッド Criterion 省略形 引数 説明
setGetNoneNew なし Q::goc bool GET時にデータが存在しない場合にデータを作成して返す(ソースのコメントより引用)
setFact Q::fact なし なし
setPager Q::pager*1 なし Paginatorクラス PaginatorクラスからLimitとOffsetを指定
setLimit なし なし 数値 LIMIT 数値
setOffset なし なし 数値 OFFSET 数値
setLock なし なし bool FOR UPDATE
setUnionAll なし なし bool Union実行時にUNIONとするかALLとするか(ソースの略)
add Q::equal Q::eq カラム,値 addEqualと同等
addEqual Q::equal Q::eq カラム,値 カラム = 値
addNotEqual Q::notEqual Q::neq カラム,値 カラム != 値
addGreater Q::greater Q::gt カラム,値 カラム > 値
addGreaterEquals Q::greaterEquals Q::gte カラム,値 カラム >= 値
addLess Q::less Q::lt カラム,値 カラム < 値
addLessEquals Q::lessEquals Q::lte カラム,値 カラム <= 値
addLike Q::like なし カラム,値 カラム LIKE 値
addNotLike Q::notLike なし カラム,値 カラム NOT LIKE 値
addLikei Q::ilike なし カラム,値 カラム ILIKE 値
addNotLikei Q::notiLike なし カラム,値 カラム NOT ILIKE 値
addIn Q::in なし カラム,値 カラム IN 値
addNotIn Q::notIn なし カラム,値 カラム NOT IN 値
addOrder Q::order なし カラム ORDER BY カラム
addOrderDesc Q::orderDesc なし カラム ORDER BY カラム DESC
addDistinct Q::distinct なし カラム DISTINCT カラム
addSum Q::sum なし カラム SUM(カラム)
addJoin Q::join なし カラム,カラム JOIN(恐らく2番目は別テーブルのカラムを指定)
addCriteria なし なし Criteria Criteriaを追加
addCriteriaOr なし なし Criteria Criteriaを追加(OR)
clear なし なし なし 条件をクリア

※「値」は「カラム」でも可
※「カラム」は、テーブルクラスの「columnカラム名」メンバを指定。例えばBBSテーブルのidカラムなら「Bbs::columnId()」とする。
基本的には、前に説明した方法で使えるんだけど、コンストラクタにQ::で簡単に指定できる。
例えば

$criteria = new Criteria();
$criteria->setLimit(5);
$criteria->addOrderDesc(Bbs::columnId());
$object_list = $dbUtil->select(new Bbs(), $criteria);

は、

$object_list = $dbUtil->select(new Bbs(), new Criteria(Q::orderDesc(Bbs::columnId()), Q::pager(5)));

と書ける。

joinする場合

2007/04/18追加
例えば

 Q::join(Items::columnGroupId(), Groups::columnId())

のようなjoinを追加する場合、

$items = $dbUtil->select(new Items(),new Criteria(
Q::join(Items::columnGroupId(), Groups::columnId())
));

としても、Itemsの項目しか返ってこない。この場合、

list($items, $groups) = $dbUtil->select(array(new Items(), new Groups()),new Criteria(
Q::join(Items::columnGroupId(), Groups::columnId())
));

とすると、$itemsと$groupsが同じkeyで返ってくる。

複数JOIN時の注意

lingrのログを見てください

*1:これの場合は、引数をlimit, offsetの形式で指定することも可能。この場合offsetは省略可。