Aug 1
逆引きrhaco37: テーブルの操作対象行を絞りこむ(where句をつくる)
テーブル内のデータを検索する時などに条件を指定してデータを絞りこみます。SQLで言うwhere句です。今回はrhacoでwhere句を作成していきます。
逆引きrhaco36でも紹介しましたが、検索条件の指定にはCriteria(C)とCriterion(Q)を使います。
CriteriaはCriterionをつなげる役割があり、
Criteria(Criterion, Criterion, Criterion...)
という形でDbUtilに検索条件を渡します。
以下に良く使うCriterionのメソッド(各条件に相当します)をリストします。下の例でAはカラム,B,C...は値やカラムが指定されます。
- equal(A,B): カラムAとBが等しい
- notEqual(A,B): カラムAとBが等しくない
- greater(A,B): BよりカラムAが大きい(A>B)
- greaterEquals(A,B): カラムAはB以上(A>=B)
- less(A,B): カラムAはB未満(A<B)
- lessEquals(A,B): カラムAはB以下(A<=B)
- in(A,array(B,C,D)): カラムAはB,C,Dのどれか
- notIn(A,array(B,C,D)): カラムAはB,C,Dのどれでもない
- like(A,B,"p"): カラムAはBを含む("p"は一致条件で、この場合Bを「含む」となる。他にf,rなどが指定できる)
- notLike(A,B,"p"): カラムAはBを含まない
- ilike(A,B,"p"): 大文字小文字を無視したlike
- notiLike(A,B,"p"): 大文字小文字を無視したnotLike
(selectIn, selectNotInもあり、非常に便利なのですが、個人的にはあまり使ってません・・・)
Criterionを作っていくには次の2通りあります。
1.一度に作る場合
$criteria = new Criteria(Criterion::equal(Product::columnName(),'hoge'),Criterion::greater(Product::columnNum(),10));
2.別のタイミングで追加する場合
$criteria = new Criteria(Criterion::equal(Product::columnName(),'hoge'))); .... $criteria->addCriteria(new Criteria(Criterion::greater(Product::columnNum(),10)));
上の2つは2つのCriterionをANDでつなげた形となり、
where product.name = 'hoge' and product.num > 10;
と同じ意味(実際書き出されるSQLはずっと複雑です)になります。
※ただし同じ意味になるのは「検索条件をつなげた場合」です。Criterionは別のケースでは同じ意味にならないケースがありますので、ご注意下さい(また書きます)。
そういう意味では1の書き方が一番無難かと思います。
このエントリーのはてなブックマーク (