ECサイト運営開発記

PHPフレームワーク Laravelの使い方を中心とした通販サイトの開発日記

LaravelのORM Eloquentで括弧を使ったクエリーのグループ化する方法

  • 商品テーブルから削除フラグが0で公開ステータスが1の商品で、更に入力されたキーワードに該当する商品を取得したい
<?php

// キーワード
$keyword=Input::get("keyword");

// 検索
$itemList=Item::where("del_flg", "=", 0)
->where("item_public_status", "=", 1)
->where(function($query) use($keyword)
{
  $query->where("item_name", "LIKE", "%$keyword%");
  $query->or_where("item_meta_keywords", "LIKE", "%$keyword%");
  $query->or_where("item_meta_description", "LIKE", "%$keyword%");
})
->get();
  • ポイントは無名関数を使うときに、useを使うこと。
    • 無名関数内では、$keywordにアクセスできないためuse構文を使用する。
    • useには複数指定できるので、引き継ぎたい変数をどんどんぶっこめばいいだけ。
  • こうして実行されるSQL
SELECT 
 * 
FROM 
 `item` 
WHERE 
`del_flg` = '0' AND `item_public_status` = '1' AND 
 (`item_name` LIKE '%チョコ%' OR `item_long_description` LIKE '%チョコ%' OR `item_meta_keywords` LIKE '%チョコ%' OR `item_meta_description` LIKE '%チョコ%')