У меня есть несколько переменных, которые я получаю из формы POST, например, так:
$search = $request->search;
$day = $request->day;
$month = $request->month;
$year = $request->year;
$status = $request->status;
На самом деле у меня есть еще куча, отсюда и мой вопрос. Я использую эти переменные для запроса к моей базе данных, используя области. То, как я делаю это сейчас:
Области применения цепочки:
$appointments = Appointment::latest('created_at')->search(search)->day($day)->month($month)->get(); // and so on..
Но это работает, только если я использую следующие области:
public function scopeSearch($query, $date)
{
if($search)
{
return $query->whereDate('start', '=', $date);
} else {
return false;
}
}
Потому что с помощью вышеуказанного метода цепочки, если ничего не было найдено, и я все еще напрямую возвращаю запрос, результаты, очевидно, не найдены. Я изменил свои рамки так:
public function scopeSearch($query, $value)
{
return $query->whereDate('condition', '=', $value);
}
Но я должен был бы сделать следующее в моем контроллере:
$appointments = Appointment::latest('created_at');
if($day) {
$appointments = $appointments->month($day);
}
if($month) {
$appointments = $appointments->month($month);
}
if($year) {
$appointments = $appointments->month($year);
}
if($status) {
$appointments = $appointments->month($status);
}
$appointments = $appointments->get();
Да, это работает, но это глупо. Есть ли способ сделать это, о котором я еще не знаю? Должен ли я использовать foreach для этого вместо этого, может быть, или есть более чистый путь?
Задача ещё не решена.
Других решений пока нет …