Jedną z mocnych stron Laravel jest jego elegancka składnia. Jeśli masz wiele modeli i relacji w Laravel (ze względu na dużą liczbę tabel w bazie danych), przechodzenie często kończy się mniej eleganckim kodem. Z biegiem czasu sprawdziły się trzy małe rozszerzenia, które chciałbym pokrótce przedstawić poniżej. 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 wezwanie jest więc możliwe również w powyższym przykładzie:
b45e29b9125c2ab565b5526442437686
Sprawdź puste obiekty
Jeśli chcesz wyprowadzić nazwę kraju na adres prywatny, często zobaczysz następujący kod:
b45e29b9125c2ab565b5526442437686
Aby temu zapobiec, dołączamy bibliotekę stringhelper i zwracamy specjalny obiekt pustej klasy, pusty, jeśli model nie zostanie znaleziony:
b45e29b9125c2ab565b5526442437686
To również sprawia, że połączenie jest pomyślne (w tym przykładzie, jeśli coś zostanie znalezione, wyświetlana jest nazwa kraju, we wszystkich innych przypadkach pusty ciąg).
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 zapewnia, że wywołanie nieznanych funkcji w kolekcjach powoduje wykonanie funkcji 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 wywołanie sortuje tylko według lokalizacji , chociaż prawdopodobnie nie tego chciałeś:
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