2017-02-11 2 views
0

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

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

ответ

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

Спасибо так много он работал! – Christian

Смежные вопросы