Laravelクエリビルダーのwhereメソッドに変数を含むクロージャを渡す

okwaves2024-01-25  8

Laravel のドキュメントによると、「or」条件は、最初の引数として Closure を orWhere メソッドに渡すことでグループ化できます。

$users = DB::table('users')
        ->where('votes', '>', 100)
        ->orWhere(function($query) {
            $query->where('name', 'Abigail')
                  ->where('votes', '>', 50);
        })
        ->get();

私が望んでいたのは、クエリ内で次のような変数を使用することです。

$q = $request->get('query');
$users = DB::table('users')
            ->where('votes', '>', 100)
            ->orWhere(function($query) {
                $query->where('name', $q)
                      ->where('votes', '>', 50);
            })
            ->get();

次のように 2 番目の引数として渡そうとしました。

$q = $request->get('query');
$users = DB::table('users')
            ->where('votes', '>', 100)
            ->orWhere($q, function($query, $q) {
                $query->where('name', $q)
                      ->where('votes', '>', 50);
            })
            ->get();

しかし、うまくいきません。何か助けはありますか?



------------------------

データをより近いものに渡すには use() 関数を使用する必要があります ref link PHP では、クロージャとは何ですか。また、なぜクロージャで "use" を使用するのでしょうか。識別子?

 $q = $request->get('query');
 $users = DB::table('users')
          ->where('votes', '>', 100)
          ->orWhere(function ($query) use($q) { //  use function to pass data inside
                $query->where('name', $q)
                    ->where('votes', '>', 50);
           })
           ->get();

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。