Laravel - wymowne „ma”, „z”, „gdzieh”

Laravel - wymowne „ma”, „z”, „gdzieh”

Problem

ma, z I gdzie Czasami może być mylące dla początkujących programistów. Dajmy pewne spojrzenie na to, co oznacza każdy z nich

Rozwiązanie

z() jest ogólnie używany z chętnym ładowaniem, co jest szybkim sposobem na pobieranie powiązanych modeli. Zasadniczo oznacza to, że wraz z głównym modelem Laravel będzie wstępnie załadować wymienione relacje (y). Jest to korzystne, gdy trzeba załadować dodatkowe dane i chcesz uniknąć tworzenia N+1 Złe praktyki DB. Z chętnym ładowaniem uruchamiasz tylko jedno dodatkowe zapytanie DB zamiast potencjalnie setek dodatkowych zapytań.

Przykład:

Użytkownik> HasMany> Organizacja
$ Users = User :: z („organizacje”)-> get ();
foreach ($ Users As $ User)
$ Użytkownicy-> organizacje; // Posty są już załadowane i nie ma dodatkowego zapytania DB

Ma

ma() służy do filtrowania modelu wyboru na podstawie wybranej relacji. Jest to w zasadzie metoda relacji. Jeśli tylko użyjesz ma („organizacja”), Korzystając z tego samego przykładu użytkowników i organizacji, oznaczałoby to, że przyciągnie wszystkich użytkowników, którzy mają co najmniej jedną organizację w swoim „portfolio”.

Przykład:

Użytkownik> HasMany> Organizacja
$ Users = User :: ma („organizacje”)-> get ();
// tylko użytkownicy, którzy mają co najmniej jedną organizację w swoim portfolio
zawarty w kolekcji

Gdzie

gdzieh () jest prawie taki sam jak ma(). Pozwala tylko określić dodatkowe filtry do sprawdzenia modelu powiązanego.

Przykład:

Użytkownik> HasMany> Organizacja
$ Users = User :: gdzieHas („organizacje”, funkcja ($ q)
$ q-> gdzie („created_at”, '> =', '2020-01-01 00:00:00');
)-> get ();
// tylko użytkownicy, którzy mają organizacje utworzone na początku 2020 roku, są zwracani