Aug 6

逆引きrhaco41: select結果を検索条件に使用する

テーブルからselectでデータを取得して、その中のあるフィールド値を検索条件として使いたい時はCriterionの次のメソッドを使います。

getEqual

$db = new DbUtil(Product::connection());
$list = $db->select(new Product(),new C(
Q::getEqual(Product::columnId(),Category::columnProductId(),new C(Q::eq(Category::columnId(),1)))));			

この場合Categoryのid1番目を取得し、そのデータのproductIdとProductのidが等しいものを取得することになります。

getNotEqual
$db = new DbUtil(Product::connection());
$list = $db->select(new Product(),new C(
Q::getNotEqual(Product::columnId(),Category::columnProductId(),new C(Q::eq(Category::columnId(),1)))));			

この場合Categoryのid1番目を取得し、そのデータのproductIdとProductのidが等しくないものを取得することになります。

selectIn
$db = new DbUtil(Product::connection());
$list = $db->select(new Product(),new C(
Q::selectIn(Product::columnId(),Category::columnProductId(),new C(Q::eq(Category::columnName(),'rhaco')))));	

この場合Categoryのnameがrhacoのデータを取得し、そのproductId(複数)のいずれかとProductのidが等しいものを取得することになります。

selectNotIn
$db = new DbUtil(Product::connection());
$list = $db->select(new Product(),new C(
Q::selectIn(Product::columnId(),Category::columnProductId(),new C(Q::eq(Category::columnName(),'rhaco')))));	

この場合Categoryのnameがrhacoのデータを取得し、そのproductId(複数)のどれにもProductのidがあてはまらないものを取得することになります。

このようにrhacoにはselect結果を直接検索条件に指定出来るメソッドがあります。
検索→検索結果でループ→ループした各データを元に検索実行

みたいなコードを書く手間が1行で済んでしまいます。こういったコードを書くことはしばしばあるので、重宝するのではないでしょうか?

| comment(0)

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