2017-02-22 112 views
0

我第一次展示寫在我的控制器代碼:多重複的查詢 - Laravel

public function __construct(Utility $utility) 
{ 
$league = $utility->checkDomainController(); 
view()->share('league', $league); 
$this->league = $league; 
} 

public function getDashboard() 
{ 
return view('dashboard.dashboard', compact('activities')); 
} 

現在我想分享$聯賽在控制器目前有方法的所有意見。 ($聯盟只包含一個查詢)。

但現在我面對的問題是,查詢獲取與數包括瀏覽主視圖複製。這裏的儀表板是主視圖。所以,現在如果主視圖中包含7個視圖,然後查詢$聯盟得到執行7次。下面是圖片:列入dashboard.blade.php

的看法圖片查詢 Picture of views included in dashboard.blade.php

圖像獲取複製 Picture of Queries getting duplicated

任何解決這個?任何更好的方法來處理這個?

+1

你能告訴您的視圖代碼中調用這個'$ league'變量? – Jerodev

+0

我在我的視圖上的很多地方使用該變量,但問題與主視圖中包含的視圖和分支有關。如果我返回一個普通的視圖,那麼查詢只執行一次。 – Siddharth

+1

您是否將變量發送給partials? – Jerodev

回答

1

一些解決方案向您開放。

一個解決方案是緩存查詢。只有在您的$league數據不經常更改時纔有效。

$league = Cache::remember('users', $minutes, function() { 
    return $utility->checkDomainController(); 
}); 

另一種解決方案是使用View Composer。只有在呈現特定視圖時纔會調用它。所以如果你包含一次,它會呈現一次。

View::composer('leagues', function ($view) { 
    // 
}); 

瞭解更多關於此觀點的作曲家:https://laravel.com/docs/5.4/views#view-composers

+0

我會嘗試這個,並會讓你。我非常感謝你對這個 – Siddharth

+0

的幫助,但如果我不想與某些觀點分享聯賽怎麼辦。我能用中間件做些什麼嗎? – Siddharth

+0

這將被鏈接到該特定視圖。並非所有觀點。 – EddyTheDove