簡體   English   中英

Laravel-刀片視圖中的重復查詢-減少查詢數量

[英]Laravel - Repetitive query in blade view - Reducing number of queries

我處在有很多關系的情況下,這變得很麻煩,因為當我進行很多查詢時,它會使網站變慢。

例如,我正在對所有博客進行foreach循環,並獲取創建博客的用戶。

@foreach ($blogs as $blog)
    <a href="{{ route('blog.view', str_slug($blog->title)) }}">{{ $blog->title }}</a>

    {{ $blog->created_at }}

    <a href="{{ viewProfile($blog->user) }}"><{{ $blog->user->username }}/a>

    Last Commenter:
    <a href="{{ viewProfile($blog->lastCommenter()->user) }}">
        {{ $blog->lastCommenter()->user->username }}
    </a>

@endforeach

僅此一項就超過了50多個查詢。如果有大約100個博客,查詢的數量將大大減少。

我如何避免這樣做? 我已將其存儲在此視圖的變量中,但我不想真正將任何PHP代碼放入刀片文件中。 我如何避免這樣做? 我曾嘗試過使用數據庫中的緩存,但這也對數據庫中的緩存表進行了一些查詢。 我還使用渴望加載,這很有幫助。 但是我怎樣才能最好地做這種事情?

非常感謝您的提前答復。

那就是N + 1問題。 您應該首先學習如何使用Eager加載和加載關系。 然后遍歷集合以向用戶顯示數據。

急於從文檔中加載多個關系的示例:

$books = App\Book::with('author', 'publisher')->get();

@Achraf Khouadja建議的示例和教程

$blogs = blog::with('lastCommenter', 'user')->get();

暫無
暫無

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

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