人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravelのモデルで複数のAND条件のクエリーを実行する

● クロージャを使ってLaravelのモデルで複数のAND条件のクエリーを実行する

例えば「日付が 2019/01/01」かつ「 report_name_1に何か入っている または report_name_2に何か入っている または report_name_3に何か入っている」
という条件はクロージャを使って以下のように記述できます。

$data_loop = \App\Report::where('kigen_date','=','2019-01-01')
            ->where(function($query) {
                $query->orWhereNotNull('report_name_1')
	                  ->orWhereNotNull('report_name_2')
	                  ->orWhereNotNull('report_name_3');
            })
->get();

● スコープを使ってLaravelのモデルで複数のAND条件のクエリーを実行する

ローカルスコープを使うのもおすすめです
スコープを使うと SQL文で言う所の 「AND ( 何かしらのSQL文 )」 を発行することができます。

例えば次のような単純なSQL文もスコープにしてしまうと簡単です。

AND ( feed_id = 100 )

モデルファイル( 例:User モデルの場合 ) app/User.php

    /**
     * ローカルスコープ:inFeed:フィードIDに限定するスコープ
     */
    public function scopeInFeed($query, $feed_id)
    {
        return $query->where('feed_id','=', $feed_id);
    }

コントローラファイルに記述

$model->inFeed( 100 );	// ローカルスコープ適用
No.1370
06/28 19:22

edit