首页 > 解决方案 > 如何编写一个雄辩的查询,将这 2 个查询连接、合并或联合为 1?

问题描述

// 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 查询。

在此处输入图像描述

结果是正确的,但是需要 2 次查询。
如何编写一个雄辩的查询,将这 2 个查询连接、合并或联合为 1?

标签: phplaravel

解决方案


为什么要分开买?你可以用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();

这样,您将获得两个(公共或私人)类别。


推荐阅读