Eloquent WHERE和“sub”OR

时间:2016-09-22 10:05:56

标签: laravel eloquent

我对WHERE子句

有疑问

在查询中我想说

SELECT ...
FROM ...
WHERE link.hos_id = $hos_id
AND   outcome.otc_otrdischargedate = $td
AND   outcome.otc_outcome LIKE ['%ICU%', '%I.C.U%', '%L3%']

但是它读起来像这样

SELECT ...
FROM ...
WHERE link.hos_id = $hos_id
AND   outcome.otc_otrdischargedate = $td
OR    outcome.otc_outcome LIKE ['%ICU%', '%I.C.U%', '%L3%']

如何将laravel查询结构化为像第一个例子一样阅读?

    $matchThese = ['link.hos_id' => $hos_id, 'outcome.otc_otrdischargedate' => $td];
    $icu = DB::table('link')
        ->join('demographic', 'link.lnk_dmgid', '=', 'demographic.dmg_id')
        ->join('admission', 'link.lnk_admid', '=', 'admission.adm_id')
        ->join('outcome', 'link.lnk_otcid', '=', 'outcome.otc_id')
        ->where($matchThese)
        ->orWhere('outcome.otc_outcome', 'like', '%ICU%')
        ->orWhere('outcome.otc_outcome', 'like', '%I.C.U%')
        ->orWhere('outcome.otc_outcome', 'like', '%L3%')
        ->orWhere('outcome.otc_outcome', 'like', '%Level3%')
        ->orWhere('outcome.otc_outcome', 'like', '%Level 3%')
        ->orWhere('outcome.otc_outcome', 'like', '%Intensive Care Unit%')
        ->get();
    $icuSize = sizeof($icu);

解决方案 - 感谢@Mehravish Temkar

不同的查询,但相同的主体

    $array_conditions = array('%ICU%', '%I.C.U%','%L3%','%Level3%','%Level 3%','%Intensive Care Unit%');
    $step_down_icu = DB::table('link')
        ->join('daily_link', 'link.lnk_id', '=', 'daily_link.dlk_lnkid')
        ->join('admission', 'link.lnk_admid', '=', 'admission.adm_id')
        ->join('outcome', 'link.lnk_otcid', '=', 'outcome.otc_id')
        ->where('admission.adm_referraldate', '=', $td)
        ->where('outcome.otc_outcome', 'like', '%ICU%')
        ->Where(function ($query) use($array_conditions) {
            for ($i = 0; $i < count($array_conditions); $i++){
                $query->orwhere('outcome.otc_outcome', 'like',  '%' . $array_conditions[$i] .'%');
            }
        })->get();
    $step_down_icuSize = sizeof($step_down_icu);

2 个答案:

答案 0 :(得分:5)

这应该有效:

$array_conditions = array('%ICU%', '%I.C.U%','%L3%'); 

$matchThese = ['link.hos_id' => $hos_id, 'outcome.otc_otrdischargedate' => $td];
    $icu = DB::table('link')
        ->join('demographic', 'link.lnk_dmgid', '=', 'demographic.dmg_id')
        ->join('admission', 'link.lnk_admid', '=', 'admission.adm_id')
        ->join('outcome', 'link.lnk_otcid', '=', 'outcome.otc_id')
        ->where($matchThese)
        ->whereIn('outcome.otc_outcome', 'like', $array_conditions)
        ->get();
    $icuSize = sizeof($icu);

答案 1 :(得分:1)

只需使用<Router history={browserHistory}> <Route path="/" component={App}> <Route path="about" component={About}/> <Route path="users" component={Users}> <Route path="/user/:userId" component={User}/> </Route> <Route path="*" component={NoMatch}/> </Route> 切换orWhere()即可。查询构建器将使用 AND 链接SQL子句。

where()
相关问题