Laravel ループ処理を用いてeloquentのAND ORの複合検索を行いたい

実現したいこと

foreachに配列を入れて、それを用いてsql文のwhereが(A or B) AND (C or D) AND...になるような感じにしたい

発生している問題・分からないこと

ループを使わない最終的な処理の形は把握できているんですが、foreachを組み込んでやろうとするとどう変えていいのかがわからなくなってしまいます。

下記ソースコードの$arrayには検索をかける名前の配列が二次元配列で入っています。

該当のソースコード

PHP

1 $sql = sample::select(['favorite', 'number'])2 ->where(function ($query) use ($array){3 foreach($array as $search_name){4 $query->where('name', 'LIKE', '%'.$search_name[0].'%')5 ->orWhere('name', 'LIKE', '%'.$search_name[1].'%');6 }7 })->get();

試したこと・調べたこと

上記の詳細・結果

ループの中に$queryをもう1つ作ればできたりするのでは?と思い、$query->where(function ($query) use ($search_name)と入れてみたりしたのですが、うまいこと動かせずに詰まってしまいました。

補足

php 8.2.15
Laravel 10.48.4

コメントを投稿

0 コメント