2017-05-16 15 views
5

特定の年までの結果を得るために、すべてのアプリケーションクエリに対してフィルタを追加したいと思います。laravel 4.2のすべてのクエリ結果をフィルタリングする方法

public function postLogin() 
{ 
    Session::put('currentYear', date("Y")); 
} 

私は自分のアプリケーションで多くのコントローラを持っています。以下に示すように

は、私がセッションに現在の年を入れています。私はモデルのクエリ結果をセッションごとにフィルタリングしたい年=>セッション:: get( 'currentYear')

私はモデルがたくさんあります。たとえば、すべてのユーザー、教師、学生を表示するルートが1つあります。

public function getList() 
{ 
    $data['students'] = User::where('group_id', '=', 4)->get(); 

    return View::make('students.list', $data); 
} 

私は​​により、すべてのアプリクエリをフィルタリングするBaseControllerに__constructを入れることはできますか?

+0

グローバルスコープhttps://laravel.com/docs/4.2/eloquent#global-scopes – Nerea

+0

なぜ特定の機能にwhere句を追加するだけではないのですか?グローバルフィルタを追加すると、他のクエリにも影響する可能性があります。 –

答えて

3

私は、このような明らか function getUserBaseQuery() { return User::where('year', '=', Session::get('currentYear')); }

として所望の塩基クエリは、currentYearが設定されていることを確認して提供する方法でリポジトリクラスを作成します - とまだget()を実行せずにこれを返します。

クエリを作成したときにこの基本クエリを取得し、さらに操作(制限、順序など)を追加してget()を実行します。

このようにして、グローバルな潜在的なダメージを与えずにフィルタにアクセスし、そのベースクエリを選択することによってどのフィルタが実行されているか把握することができます。

あなたには意味がありますか?

+0

アプリケーションの各モデルに対して同じフィルタを作成するようです。 私はセッションの年の選択メニューでアプリケーションを見た前に、このアプリケーションにログインすると、すべてのビューとモデルの選択した年のレコードのみを取得する年を変更することができます。私は、アプリケーション内のすべてのモデルに対してグローバルフィルタを作成する方が良いと思います。その解決策に関する考え方は? –

+0

"User"などのモデルクラス名を渡すメソッドにパラメータを追加できます。次に、$ model :: where(...)を使って一般的なフィルタを適用します。 –

関連する問題