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の書き方が一番無難かと思います。

| comment(0)

このエントリーのはてなブックマーク (-)