Прицелы Laravel

У меня есть несколько переменных, которые я получаю из формы 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 для этого вместо этого, может быть, или есть более чистый путь?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector