laravel eloquent,就像整数运算符一样

时间:2017-02-11 16:41:28

标签: php mysql laravel laravel-eloquent

我现在正在处理的是生成报告,我在一个页面中有多个字段,分别是地址,日期,性别和疫苗

我想要的是即使地址为空并且我输入了性别,它仍然会检索已经选择的所有特定性别,如果用户没有在字段上输入任何内容,它将自动检索所有记录。所以我做的就是这个

在我的控制器中

if (!$request->input) {
    $request->input = "";
}
if (!$request->vaccines) {

    $vaccine_id = "";
}else{
    $vaccine_id = $request->vaccines;
}
if (!$request->month) {

    $newDate = " ";
}else{
    $newDate = date("Y-m-d", strtotime($request->month));
}
if (!$request->gender) {

    $request->gender = "";
}

$patient = Patient::where('patient_address', 'like' ,'%' . $request->input)->where('patient_sex', 'like' ,'%' . $request->gender)->whereHas('users', function($q) use($vaccine_id){
        $q->where('vaccine_id',  $vaccine_id);
    })->get();

所以我使用LIKE运算符,这样即使患者地址为空,它仍然会返回与=运算符不同的结果,它会自动返回false并结束WHERE子句的其余部分。字符串类型的列正好像患者的地址和性别一样工作。但我发现你不能在整数上使用LIKE运算符。因此,如果我在vaccine_id上​​使用=,如果条件为false,则不会像LIKE运算符那样自动检索数据库中的所有数据。

有没有解决方案?

1 个答案:

答案 0 :(得分:1)

试试这个:

$query = Patient::where('patient_address', 'like' ,'%' . $request->input)->where('patient_sex', 'like' ,'%' . $request->gender);

if($vaccine_id != "") {
    $query->whereHas('users', function($q) use($vaccine_id){
        $q->where('vaccine_id',  $vaccine_id);
    });
}

$patient = $query->get();