Как мне написать красноречивый запрос, который объединяет, объединяет или объединяет эти 2 запроса в 1? - PullRequest
2 голосов
/ 17 февраля 2020

// 2 коллекции eloqent объединены

$publicCategories = Category::where('menu', '=', 1)
    ->where('display_scope', 1)
    ->orderBy('parent_id')
    ->get();
$privateCategories = Category::where('menu', '=', 1)
    ->whereIn('id', $ids)
    ->orderBy('parent_id')
    ->get();
$categories = $publicCategories->merge($privateCategories);

// Этот запрос выше выполняет эти 2 MySQL запросов, которые дублируются.

enter image description here

Результат из этого является правильным, однако требует 2 запроса.
Как написать красноречивый запрос, который объединяет, объединяет или объединяет эти 2 запроса в 1?

1 Ответ

2 голосов
/ 17 февраля 2020

Почему вы получаете это отдельно? Вы можете использовать Orwhere для этого.

$publicprivateCategories = Category::where('menu', '=', 1)
                        ->whereIn('id', $ids)
                        ->orWhere('display_scope', 1)
                        ->orderBy('parent_id')
                        ->get();

Обновление

$publicprivateCategories = Category::where('menu', '=', 1)
                        ->where(function($q) use($ids){
                             $q->whereIn('id', $ids)->orWhere('display_scope', 1);
                        })
                        ->where('id', '!=', 2)
                        ->orderBy('parent_id')
                        ->get();

Таким образом, вы получите оба (Publi c или private) категории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...