2022-05-18に投稿

Eloquent で複合条件の抽出をする

Eloquent を実践的に使い始めたばかりなので初歩的なところですが、複合条件を組み立てるところについてメモ。

コード

やりたいこととしては、 WHERE A AND B AND (C OR D) という条件。

$departName = [
    '総務部',
    '営業部',
];
$dataRows = $dbConnect->table('hoge_db')
                      ->where(
                          [
                              ['user_id', '>', 23],
                              ['age', '<', 42],
                          ]
                      )
                      ->where(function($query) use ($departName) {
                          $query->orWhere('depart_name', '=', $departName[0])
                                ->orWhere('depart_name', '=', $departName[1]);
                      })
                      ->select(
                          'fuga_db.name',
                          'fuga_db.attribute',
                          'fuga_db.parameter'
                      )
                      ->join('fuga_db', 'hoge_db.user_id', '=', 'fuga_db.employee_id')
                      ->get();

$dbConnect にDB接続情報が入ったインスタンスがあるという前提ですが、イメージとしてこのようなコードです。

肝は以下。

  • OR 条件の括弧の中身を where()メソッド の中にクロージャとして無名関数で記述する。
  • 関数の引数はクエリ。そこに orWhere()メソッド を足していく。
  • クロージャの外部の変数はスコープの関係で Undefined Variable になってしまうので use句 でクロージャ内に持ち込む

これで意図した挙動になることを確認しました。

参考

Originally published at labor.ewigleere.net
ツイッターでシェア
みんなに共有、忘れないようにメモ

arm-band

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント