web-dev-qa-db-ja.com

Laravel 5説得力のあるwhereおよびor Clauses

複数のwhereおよび/または句を含むテーブルから結果を取得しようとしています。

私のSQLステートメントは次のとおりです。

SELECT * FROM tbl
WHERE m__Id = 46
AND
t_Id = 2
AND
(Cab = 2 OR Cab = 4)

Laravel Eloquentでこれを取得するにはどうすればよいですか?

Laravelの私のコードは:

$BType = CabRes::where('m_Id', '=', '46')
                        ->where('t_Id', '=', '2')
                        ->where('Cab', '2')
                        ->orWhere('Cab', '=', '4')
                        ->get();
55
Crni

高度な場所 を使用:

CabRes::where('m__Id', 46)
      ->where('t_Id', 2)
      ->where(function($q) {
          $q->where('Cab', 2)
            ->orWhere('Cab', 4);
      })
      ->get();

または、whereIn()を使用してさらに良い:

CabRes::where('m__Id', 46)
      ->where('t_Id', 2)
      ->whereIn('Cab', $cabIds)
      ->get();
97
Limon Monte

また、変数がある場合は、

CabRes::where('m_Id', 46)
      ->where('t_Id', 2)
      ->where(function($q) use ($variable){
          $q->where('Cab', 2)
            ->orWhere('Cab', $variable);
      })
      ->get();
11
Jaber Al Nahian

複数のand(where)条件をlast(where +またはwhere)とともに使用すると、ほとんどの場合where条件が失敗します。そのため、パラメーターを渡すネストされたwhere関数を使用できます。

$feedsql = DB::table('feeds as t1')
                   ->leftjoin('groups as t2', 't1.groups_id', '=', 't2.id')
                    ->where('t2.status', 1)
                    ->whereRaw("t1.published_on <= NOW()") 
                    >whereIn('t1.groupid', $group_ids)
                   ->where(function($q)use ($userid) {
                            $q->where('t2.contact_users_id', $userid)
                            ->orWhere('t1.users_id', $userid);
                     })
                  ->orderBy('t1.published_on', 'desc')->get();

上記のクエリは、すべてのwhere条件を検証してから、最後にt2.status = 1および(where t2.contact_users_id = '$ userid'またはwhere t1.users_id = '$ userid')を確認します

3
Hemamalini