Laravel - 单个查询然后拆分Vs两个查询

rap*_*dko 1 php optimization laravel

我正在使用laravel框架,我需要获得2个数组,一个具有高级主题,另一个具有免费主题..所以我会这样做:

$premium_themes = \App\Theme::where('premium', '=', '1')->get();
$free_themes = \App\Theme::where('premium', '=', '0')->get();
Run Code Online (Sandbox Code Playgroud)

这将工作正常,但将对数据库执行两个查询.由于我是一个优化极客,我认为拥有一个查询可能会更好......我会通过使用获得所有主题:

$themes = \App\Theme::all();
Run Code Online (Sandbox Code Playgroud)

然后我将在php中处理这个基于主题高级属性的分割.

所以我有两个问题:

1)在这种情况下,单个查询优于2个查询,还是我过度思考?

2)是否有一种快速简单的方法可以根据高级属性将生成的集合拆分为两个集合?(我知道Laravel有许多快捷方式,但我还是框架的新手)

Mat*_*row 5

单个查询会更好,因为两个查询都将遍历数据库中的所有行.除了分裂它们的2个查询之外,它们将再次进行查询.

你可以简单地过滤它们;

简单的一线解决方案$themes = \App\Theme::all()->groupBy('premium');.

如果您需要通过其他元素进行过滤等,或者在以下内容中添加更多内容,请转到单独的集合

$themes = \App\Theme::all();

$premium = new Collection;
$free = new Collection;

$themes->each(function ($item) use ($premium, $free){
    if($item->premium == '1'){
        $premium->push($item);
    } 
    else {
        $free->push($item);
    }
});
Run Code Online (Sandbox Code Playgroud)

并且您的商品将被过滤为相关内容Collection.请务必使用Collection顶部的课程.