Crn*_*rni 61 sql laravel eloquent
我试图从表中获得多个where和/或子句的结果.
我的SQL语句是:
SELECT * FROM tbl
WHERE m__Id = 46
AND
t_Id = 2
AND
(Cab = 2 OR Cab = 4)
Run Code Online (Sandbox Code Playgroud)
我怎么能用Laravel Eloquent来解决这个问题?
我在Laravel的代码是:
$BType = CabRes::where('m_Id', '=', '46')
->where('t_Id', '=', '2')
->where('Cab', '2')
->orWhere('Cab', '=', '4')
->get();
Run Code Online (Sandbox Code Playgroud)
Lim*_*nte 116
使用先进的wheres:
CabRes::where('m__Id', 46)
->where('t_Id', 2)
->where(function($q) {
$q->where('Cab', 2)
->orWhere('Cab', 4);
})
->get();
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好,使用whereIn():
CabRes::where('m__Id', 46)
->where('t_Id', 2)
->whereIn('Cab', $cabIds)
->get();
Run Code Online (Sandbox Code Playgroud)
Jab*_*ian 20
另外,如果你有变量,
CabRes::where('m_Id', 46)
->where('t_Id', 2)
->where(function($q) use ($variable){
$q->where('Cab', 2)
->orWhere('Cab', $variable);
})
->get();
Run Code Online (Sandbox Code Playgroud)
当我们使用多个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();
Run Code Online (Sandbox Code Playgroud)
上面的查询验证所有 where 条件然后最后检查 where t2.status=1 and (where t2.contact_users_id='$userid' or where t1.users_id='$userid')
| 归档时间: |
|
| 查看次数: |
125400 次 |
| 最近记录: |