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行で済んでしまいます。こういったコードを書くことはしばしばあるので、重宝するのではないでしょうか?
このエントリーのはてなブックマーク (