簡體   English   中英

Laravel-單個查詢,然后對兩個查詢進行拆分

[英]Laravel - Single query then splitting Vs Two queries

我正在使用laravel框架,我需要獲得2個數組,一個數組具有高級主題,而另一個數組具有免費主題..所以我會這樣做:

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

可以,但是可以在數據庫上執行兩個查詢。 由於我是一個優化極客,所以我認為最好有一個查詢...使用以下方法可以獲得所有主題:

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

然后,我將在php中進行處理,以基於主題高級屬性進行拆分。

所以我有兩個問題:

1)在這種情況下,單個查詢要比2個查詢好,還是我對此考慮過度?

2)是否有一種快速簡便的方法,可以根據premium屬性將結果集合分為兩個集合? (我知道Laravel有許多快捷方式,但是我仍然是框架的新手)

單個查詢會更好,因為兩個查詢都將遍歷數據庫中的所有行。 除了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);
    }
});

並且您的項目將被過濾到相關的Collection 確保在頂部使用Collection類。

我可以認為將其保留為單獨的查詢的唯一原因是,如果您需要對數據進行分頁-如果將它們全部混合在一起,就不能輕松地進行操作。

“捷徑”將使用集合filter()方法,我在捷徑中加上了捷徑,因為它本身不是短的,更像糖的糖-但是Larvel如果沒有裝滿糖就什么都不是,那為什么不呢?

代碼如下所示:

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

$premiumThemes = $allThemes->filter(function($theme)
{
    return $theme->premium;
});

$freeThemes = $allThemes->filter(function($theme)
{
    return !$theme->premium;
});

編輯:我建議使用馬特·伯羅(Matt Burrow)的答案,但由於解決方案有所不同,我將在這里保留我的意見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM