Упростить Eloquent Laravel с несколькими фильтрами и нумерацией страниц? - PullRequest
0 голосов
/ 18 декабря 2018

Мой вопрос касается упрощения нескольких запросов 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?

1 Ответ

0 голосов
/ 18 декабря 2018

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

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...