laravel красноречивый, где как оператор для целого числа

Сейчас я работаю над созданием отчета, и у меня есть несколько полей на одной странице: адрес, дата, пол и вакцина.

Я хочу, чтобы даже если адрес был пуст, и я ввел пол, он все равно получит весь выбранный пол, и если пользователь ничего не ввел в поля, он автоматически извлечет все записи. Итак, что я сделал, это

В моем контроллере

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 для целого числа. Поэтому, если я использую = для вакцины_id, если условие ложно, оно не будет автоматически извлекать все данные из базы данных, в отличие от оператора LIKE.

Есть ли какое-нибудь решение для этого?


person Christian    schedule 11.02.2017    source источник


Ответы (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();
person Paras    schedule 11.02.2017