Laravel 5雄辩的条款和/或条款


76

我尝试从具有多个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();

Answers:


144

使用高级位置

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

谢谢,这正在工作:)但是,如果我的数组喜欢,我如何用cab数组获取它:arrCab [2,4,6]
Crni

为什么会更好,变量$cabIds从何而来?
raart's

第二个选择是最好的选择
阿伦·约克什

我可以请您在这里查看Laravel表联接相关的问题吗:stackoverflow.com/questions/52149031/…
Istiaque Ahmed '18

30

另外,如果您有一个变量,

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

您可以在“使用”的地方链接吗?我在研究中没有找到它。
纳吉

6

当我们将多个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();

上面的查询验证了所有条件,然后最终检查了t2.status = 1和(其中t2.contact_users_id ='$ userid'或t1.users_id ='$ userid')


-1

您可以尝试使用以下代码代替:

 $pro= model_name::where('col_name', '=', 'value')->get();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.