2017-05-16 9 views
5

Chcę dodać filtr do wszystkich zapytań dotyczących aplikacji, aby uzyskać wynik w określonym roku.Jak filtrować wszystkie wyniki zapytania w aplikacji Laravel 4.2 do roku

kładę rok bieżący do sesji, jak pokazano poniżej:

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

Mam wiele kontrolerów w mojej aplikacji. Chcę, aby wynik zapytania dowolnego modelu filtrował według roku sesji => Session :: get ("currentYear")

Mam wiele modeli; na przykład mam jedną trasę, aby wyświetlić wszystkich użytkowników, nauczycieli i uczniów.

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

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

mogę umieścić __construct w BaseController do filtrowania wszystkich zapytań aplikacji przez Session::get('currentYear')?

+0

Zobacz globalny zasięg https://laravel.com/docs/4.2/eloquent#global-scopes – Nerea

+0

Dlaczego nie wystarczy dodać klauzuli where do swoich konkretnych funkcji? Dodanie filtru globalnego może również wpłynąć na inne zapytania. –

Odpowiedz

3

Chciałbym stworzyć repozytorium klasę z metodą, która zapewnia pożądany zapytania zasady, takiej jak function getUserBaseQuery() { return User::where('year', '=', Session::get('currentYear')); }

Oczywiście upewnij się, że currentYear jest ustawione - i powrót bez uruchamiania get() jeszcze.

Następnie otrzymaj to podstawowe zapytanie za każdym razem, gdy tworzysz zapytanie, dodaj więcej operacji (limit, kolejność, dowolne) i uruchom get().

W ten sposób można uzyskać dostęp z filtrem, nie powodując globalnych szkód potencjalnych i pozostając świadomym, jakie filtry są uruchamiane, wybierając to podstawowe zapytanie.

Czy to ma dla ciebie sens?

+0

Wygląda na to, że zrobię ten sam filtr dla każdego modelu w aplikacji. Zanim zobaczyłem aplikację z menu wyboru roku sesji, a po zalogowaniu się do tej aplikacji możesz zmienić rok, a następnie pobierzesz tylko wybrane rekordy roku dla wszystkich widoków i modeli. Myślę, że lepiej będzie stworzyć filtr globalny dla wszystkich modeli w aplikacji. jakiś pomysł na temat tego rozwiązania? –

+0

Możesz dodać parametr do metody, w której przekazujesz nazwę klasy modelu, na przykład "Użytkownik". Następnie użyj $ model :: where (...), aby zastosować ogólne filtry. –

Powiązane problemy