2017-02-22 30 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')); 
} 

今、私はコントローラであり、本発明の方法ではすべてのビューで$リーグを共有したいです。 ($ leagueは1つのクエリのみで構成されます)。

しかし、今、私が直面していますどのような問題は、クエリがメインビューと数含まビューと重複ます。ダッシュボードはメインビューです。したがって、メインビューに7つのビューが含まれている場合、$ leagueのクエリは7回実行されます。下の写真は以下のとおりです。ビューの

ピクチャーdashboard.blade.phpに含ま Picture of Queries getting duplicated

これまでの任意の解決策を重複して取得クエリの Picture of views included in dashboard.blade.php

画像は?これを処理するより良い方法はありますか?

+1

あなたはこの '$のleague'変数を呼び出すビューのコードを表示することができますか? – Jerodev

+0

私は自分のビューの多くの場所でその変数を使用していますが、問題はビューとメインビューに含まれている部分的なものです。プレーンなビューを返すと、クエリはただ1回実行されます。 – Siddharth

+1

変数をパーシャルに送信していますか? – Jerodev

答えて

1

いくつか解決策があります。

解決策の1つは、クエリをキャッシュすることです。 $leagueデータが頻繁に変更されない場合にのみ効率的です。

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

もう1つの解決策は、View Composerを使用することです。特定のビューがレンダリングされたときにのみ呼び出されます。したがって、一度組み込むと、一度レンダリングされます。

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

は、ここでは、ビュー作曲について詳しく読む:https://laravel.com/docs/5.4/views#view-composers

+0

私はこれをしようとしているとあなたをさせてくれるでしょう。私はこの – Siddharth

+0

のためにあなたの助けを非常に感謝しますが、私はいくつかのビューでリーグを共有したくない場合はどうしますか?ミドルウェアで何かできますか? – Siddharth

+0

これはその特定のビューにリンクされます。すべてのビューではありません。 – EddyTheDove