【Laravel】Eloquentのクエリを動的に生成する方法

こんにちわ、また積雪の可能性があるようで震えてるTakaです。今回はLaravelネタをひとつ。備忘録もかねてEloquentでデータ操作する場合にクエリを動的に生成する方法を紹介したいと思います。

 なお、Laravelとはなんぞやという方は下の記事を参照してください!

環境

 今回の環境は下記の通りとなります。

今回の環境

  • Laravel 5.5
  • MySQL 5.6.37

Eloquentのクエリを動的に生成する方法

 さてさて、Laravelに関わらずDB操作をしていると、クエリを動的に生成したいケースが結構あります。特に複雑なフィルタリングやソートを実装したい場合は動的に生成した方がコードの冗長化を避けることもでき、より綺麗なコードになります。

 LaravelのEloquentでクエリを動的に生成する方法は、やり方さえ分かればいたって簡単です。

 例えば、下記のようなEloquent文があるとします。


$data = Data::where('name', 'LIKE', '%山田%')->where('age', '>=', 20)->get();


 このコードは、datasテーブルから名前に「山田」が含まれ、かつ年齢が20歳以上の条件に該当するデータを取得します。

 そして、このコードは下記のように書き換えることができます。


$q = Data::query();
$q->where('name', 'LIKE', '%山田%');
$q->where('age', '>=', 20);
$data = $q->get();


 このように書くことで、クエリに条件を追加していくことができます。

 つまり、上記のように条件を追加できるということで容易にクエリの動的生成が可能になります。

 例えば、名前のあいまい検索(LIKE)にAND条件を追加したい場合は、このように書くことで実現できます。


$name = array('山田','花子');

$q = Data::query();
foreach ($name as $key => $value) {
   $q->where('name', 'LIKE', '%'.$value.'%');
}

$q->where('age', '>=', 20);
$data = $q->get();


 このコードは、datasテーブルから名前に「山田」かつ「花子」が含まれ、かつ年齢が20歳以上という条件に該当するデータを取得します。AND条件で検索したいパラメータを配列に入れて、foreachで繰り返してあげることで動的にクエリの生成ができるというわけです。

 OR検索をしたい場合も下記のようなコードを書けば実現できます。


$name = array('山田','鈴木','佐藤');

$q = Data::query();
foreach ($name as $key => $value) {
   if($key == 0){
      $q->where('name', 'LIKE', '%'.$value.'%');
   }else{
      $q->orWhere('name', 'LIKE', '%'.$value.'%');
   }
}

$q->where('age', '>=', 20);
$data = $q->get();


 このコードは、名前に「山田」か「鈴木」か「佐藤」のいずれかが含まれていて、かつ年齢が20歳以上という条件に該当するデータを取得します。

 このように、Laravelでは容易に動的クエリを生成できます。

 以上、今回はここまで!Takaでした。また!

この記事のまとめ

  • LaravelのEloquentのクエリを動的に生成する方法

お仕事のご相談・ご依頼
お気軽にお問い合わせください!

お仕事の依頼はこちら

著者プロフィール

Taka

東京、奄美大島を拠点にサーフィンとスノーボードが好きなフリーランスのWebクリエイターです。普段はプログラム書いたりデザインしたり映像作ったりしています。いろいろな人の話しを聞くのが好きなので、このブログを通して多くの人と繋がりが出来たら嬉しいです。noteとInstagramもやっているのでフォローしてくれたらありがたいです!

人気記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です