首页 文章

Laravel 5 Eloquent在和/或在子句中

提问于
浏览
44

我试图从表中获得多个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();

3 回答

  • 9

    当我们使用多个 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和(其中t2.contact_users_id ='$ userid'或t1.users_id ='$ userid')

  • 75

    使用advanced wheres

    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();
    
  • 0

    另外,如果你有变量,

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

相关问题