Jedną z mocnych stron Laravela jest jego elegancka składnia. Jeśli w Laravel masz dużo modeli i relacji (ze względu na dużą ilość tabel w bazie danych), przechodzenie często może zakończyć się mniej eleganckim kodem. Z biegiem czasu skuteczne okazały się dla mnie trzy małe rozszerzenia, które chciałbym pokrótce przedstawić poniżej. Aby to zrobić, po prostu używamy dziedziczenia, magicznych metod i niestandardowych kolekcji.
Najpierw tworzymy nowy model w app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Następnie pozwoliliśmy wszystkim modelom dziedziczyć po naszym nowym ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Połącz swoje własne funkcje z relacjami
Jeśli chcesz uzyskać połączone modele, możesz je wywołać za pomocą standardowej składni:
b45e29b9125c2ab565b5526442437686
Jeśli teraz dodajesz własną logikę biznesową, lubisz używać (niższej) notacji wielbłąda:
b45e29b9125c2ab565b5526442437686
Chcemy ujednolicić składnię obu wariantów. Aby to zrobić, dodajemy magiczną metodę __call do ConvenienceModel:
b45e29b9125c2ab565b5526442437686
To wywołanie jest również możliwe w powyższym przykładzie:
b45e29b9125c2ab565b5526442437686
Sprawdź puste obiekty
Jeśli chcesz wyświetlić nazwę kraju dla adresu danej osoby, często zobaczysz następujący kod:
b45e29b9125c2ab565b5526442437686
Aby temu zapobiec, dołączamy bibliotekę stringhelper i zwracamy specjalny obiekt pustej klasy `empty`, jeśli model nie zostanie znaleziony.:
b45e29b9125c2ab565b5526442437686
Oznacza to, że wywołanie zakończyło się sukcesem (w tym przykładzie, jeśli coś zostanie znalezione, wyświetlana jest nazwa kraju, we wszystkich innych przypadkach pusty ciąg znaków):
b45e29b9125c2ab565b5526442437686
Jeśli chcemy również pokryć przypadek, że użytkownik o ID 42 może nawet nie istnieć, zbudujemy do tego małą funkcję pomocniczą:
b45e29b9125c2ab565b5526442437686
Następujące wywołanie dostarcza zatem pusty łańcuch, nawet jeśli użytkownik w ogóle nie istnieje:
b45e29b9125c2ab565b5526442437686
Dogodnie przechodź przez relacje n: m
Na koniec chcemy uprościć następujący kod:
b45e29b9125c2ab565b5526442437686
W tym celu korzystamy z możliwości niestandardowych kolekcji . W pierwszej kolejności rozwijamy model wygody:
b45e29b9125c2ab565b5526442437686
Następnie tworzymy plik app\Helpers\ConvenienceCollection.php , który gwarantuje, że gdy w kolekcjach zostaną wywołane nieznane funkcje, funkcja ta zostanie wykonana dla wszystkich elementów w kolekcji.:
b45e29b9125c2ab565b5526442437686
Możemy więc użyć następującego kodu, aby wyświetlić wszystkie nazwy wszystkich krajów i wszystkie adresy wszystkich rodziców danej osoby:
b45e29b9125c2ab565b5526442437686
Ale możliwe są również połączenia takie jak poniżej:
b45e29b9125c2ab565b5526442437686
Sortuj według wielu kolumn
Poniższe polecenie sortuje tylko według lokalizacji , choć prawdopodobnie nie był to zamierzony wynik.:
b45e29b9125c2ab565b5526442437686
Aby umożliwić sortowanie według kilku kolumn, rozszerzamy naszą ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Dzięki temu możemy posortować kolekcję według kilku kolumn za pomocą:
b45e29b9125c2ab565b5526442437686
Sortowanie standardowe
Poszerzamy ConvenienceCollection o kolejną funkcję pomocniczą:
b45e29b9125c2ab565b5526442437686
Teraz możesz nadać każdemu modelowi indywidualną standardową funkcję sortowania:
b45e29b9125c2ab565b5526442437686
Więc możemy posortować kolekcję za pomocą:
b45e29b9125c2ab565b5526442437686
Nazwy obiektów
Każdy model implementuje metodę getLabel (getName różni się w zależności od modelu):
b45e29b9125c2ab565b5526442437686
Dzięki temu możesz szybko i łatwo wyświetlić nazwę obiektu. Następnie można zaimplementować metodę pomocniczą sortByLabel w ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Puste wyniki
Jeśli krok pośredni jest pusty, funkcje Laravela first () i last () zwykle zwracają zero. Dlatego wprowadzamy getFirst () i getLast (), aby następujące wywołanie zawsze się powiodło:
b45e29b9125c2ab565b5526442437686
Niniejszym dostarczamy z powrotem __empty_helper, który rozpoznaje __x:
b45e29b9125c2ab565b5526442437686