質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

142閲覧

LaravelでのOR/ANDの複合検索で想定通りのSQL文を組み立てたい

mimimi720

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2024/07/11 06:41

実現したいこと

検索条件をforeachで回しながら、SQL文が【"select * from table where (A or B) and C" and... 】といった状態になるようにしたいです(AとBにforeachで回す配列の値が入り、C以降に他の検索条件が追加される)。

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

Laravelにて検索機能の実装をしようとしているのですが、OR/ANDの複合条件のSQL文組み立てが上手くいかず困っております。

現状下記のような記述となっており、実行すると
【"select * from manager where (name LIKE ?) and (name LIKE ?) and authority in (?)"】
といったSQLがとれます。

どなたかアドバイスいただけますと幸いです。

該当のソースコード

php(Laravel)

1$searchName = $request->input('employeeName'); 2$cleanedSearchName = str_replace([' ', ' '], ',', $searchName); 3$name_array = explode(",", $cleanedSearchName); 4 5$employeeList = DB::table('manager'); 6if (!empty($searchName)) { 7 foreach($name_array as $searchName_array){ 8 $employeeList->where(function($employeeList) use($searchName_array){ 9 $employeeList->orwhere ('name', 'LIKE', '%'.$searchName_array.'%'); 10 }); 11 } 12 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

色々と調べ実践してみたものの、思うように動かなかったため質問いたしました。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

元データと想定結果がわからないのでなんとも言えませんが

「(A or B) and (C or D)」を実現するならANDは複数並列に書いてorはコールバックで指定すればよいでしょう

PHP

1 2$employeeList->where(function($employeeList) use($value1,$value2){ 3 $employeeList->where('column1','like','%'.$value1.'%')->orWhere('column2','like','%'.$value2.'%'); 4}); 5$employeeList->where(function($$employeeList) use($value3,$value4){ 6 $employeeList->where('column3','like','%'.$value3.'%')->orWhere('column4','like','%'.$value4.'%'); 7});

投稿2024/07/12 04:56

yambejp

総合スコア115870

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問