Aug 3

逆引きrhaco39: OR検索を行う

逆引き36,37,38でwhere句の作り方を書いていますが、この方法だとAND検索しかできません。

OR検索を行う場合は

addCriteriaOr(Criteria)またはorc(Criterion)を使用します。※1逆引き37で1番目に紹介したような1度にCriteriaを作る方法ではOR検索を作ることはできません。

使いかたですが、addCriteriaと同じように

$criteria = new Criteria(Criterion::equal(Product::columnName(),'hoge')));
....

$criteria->addCriteriaOr(new Criteria(Criterion::greater(Product::columnNum(),10)));

と書きます。これで
where product.name = 'hoge' or product.num > 10

という意味になります。

orcは
$criteria = new Criteria(Criterion::equal(Product::columnName(),'hoge'),Criterion::orc(Criterion::greater(Product::columnNum,10))));


のように書きます。1行で書きたい時に便利です。

(A and B and C) or (D and E and F)のようにしたい場合は

$criteria = new C(A, B, C);
$criteria->addCriteriaOr(new C(D, E, F));

となります(A-Fは適当なCriterionです)

※1. yabekenさんのページで取り上げてました。yabekenさんご指摘ありがとうございました。

| comment(2)

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