Упростить Eloquent Laravel с несколькими фильтрами и нумерацией страниц?

Мой вопрос об упрощении нескольких запросов Eloquent, которые работают с нумерацией страниц Laravel.

Я создаю веб-сайт Laravel, на котором люди могут делиться некоторыми рецептами.

У меня есть несколько переменных, которые члены могут искать, фильтровать и просматривать через.
Поэтому участники могут публиковать рецепты и добавлять:
— Тип
— Продолжительность
— Страна
— Платформа

Идея состоит в том, что есть страница со всеми рецептами, но есть также страницы, на которых применяются только рецепты для 1, 2 или более фильтров. Например. холодные 5-минутные рецепты или немецкие теплые длинные рецепты.

Я использую Laravel 5.7, и теперь я строю все виды запросов с различными операторами where. Как это:

 public static function getRecipesMixFilter($cid, $pid, $tid, $did)
{
$recipes = self::with(['member', 'platform', 'member.platform', 'member.duration', 'member.type'])->whereActive(1)->whereHas('member', function ($query) use ($cid, $pid, $tid, $did) {
$query->where('country_id', '=', $cid)
->where('platform_id', '=', $pid)
->where('type_id', '=', $tid)
->where('duration_id', '=', $did);
})->orderBy('updated_at', 'desc')->paginate(24);

return $recipes;
}

Но каков простой способ сделать это? Теперь у меня есть 15 различных запросов, где я чувствую, что это может быть 1. Так что -> где (‘platform_id’, ‘=’, 1) и т. д. не являются обязательными.

Когда я пытаюсь отфильтровать каждый объект, чтобы сначала указать «Платформа», «Тип» и т. Д., Я не могу применить нумерацию страниц.

Есть ли способ упростить это? И можно ли использовать фильтры Ajax с нумерацией страниц Laravel?

0

Решение

Вы делаете их необязательными, выполняя это:

public static function getRecipesMixFilter($cid = null, $pid = null, $tid = null, $did = null)
{
$recipes = self::with(['member', 'platform', 'member.platform', 'member.duration', 'member.type'])
->whereActive(1)
->whereHas('member', function ($query) use ($cid, $pid, $tid, $did) {
if ($cid) {
$query->where('country_id', '=', $cid)
}
if ($pid) {
$query->where('platform_id', '=', $pid)
}
if ($tid) {
$query->where('type_id', '=', $tid)
}
if ($did) {
$query->where('duration_id', '=', $did)
}
})->orderBy('updated_at', 'desc')->paginate(24);

return $recipes;
}
1

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

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

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