Unul dintre punctele forte ale lui Laravel este sintaxa sa elegantă. Dacă aveți o mulțime de modele și relații în Laravel (datorită multor tabele din baza de date), traversarea se poate termina adesea cu un cod mai puțin elegant. De-a lungul timpului, trei mici extensii s-au dovedit pentru mine, pe care aș dori să le prezint pe scurt mai jos. Folosim doar câteva moșteniri, metode magice și colecții personalizate.
Mai întâi creăm un nou model sub app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Apoi lăsăm toate modelele să moștenească de la noul nostru model Convenience:
b45e29b9125c2ab565b5526442437686
Amestecă-ți propriile funcții cu relațiile
Dacă doriți să obțineți modele conectate, utilizați sintaxa standard pentru a le apela:
b45e29b9125c2ab565b5526442437686
Dacă acum adăugați propria logică de afaceri, doriți să utilizați notația (inferioară) a cămilei:
b45e29b9125c2ab565b5526442437686
Vrem să standardizăm sintaxa ambelor variante. Pentru a face acest lucru, adăugăm metoda magică __call la ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Prin urmare, acest apel este posibil și în exemplul de mai sus:
b45e29b9125c2ab565b5526442437686
Verificați obiectele goale
Dacă doriți să trimiteți numele țării la o adresă personală, veți vedea adesea următorul cod:
b45e29b9125c2ab565b5526442437686
Pentru a preveni acest lucru, includem biblioteca stringhelper și returnăm un obiect special din clasa goală gol dacă nu se găsește un model:
b45e29b9125c2ab565b5526442437686
Acest lucru face ca apelul să aibă succes (în acest exemplu, dacă se găsește ceva, se afișează numele țării, în toate celelalte cazuri un șir gol).
b45e29b9125c2ab565b5526442437686
Dacă dorim, de asemenea, să acoperim cazul în care utilizatorul cu ID-ul 42 poate să nu existe, vom construi și o mică funcție de ajutor:
b45e29b9125c2ab565b5526442437686
Următorul apel oferă astfel un șir gol chiar dacă utilizatorul nu există deloc:
b45e29b9125c2ab565b5526442437686
Transferați convenabil relațiile n: m
În cele din urmă, dorim să simplificăm următorul cod:
b45e29b9125c2ab565b5526442437686
Pentru aceasta folosim posibilitatea colecțiilor personalizate . Extindem mai întâi modelul de comoditate:
b45e29b9125c2ab565b5526442437686
Apoi creăm fișierul app \ Helpers \ ConvenienceCollection.php , care asigură că apelarea funcțiilor necunoscute din colecții execută funcția pentru toate articolele din colecție:
b45e29b9125c2ab565b5526442437686
Deci, putem folosi următorul cod pentru a afișa toate numele tuturor țărilor din toate adresele tuturor părinților persoanei respective:
b45e29b9125c2ab565b5526442437686
Dar sunt posibile și apeluri precum următoarele:
b45e29b9125c2ab565b5526442437686
Sortați după mai multe coloane
Următorul apel sortează numai în funcție de locație , deși probabil că nu doreai:
b45e29b9125c2ab565b5526442437686
Pentru a permite sortarea în funcție de mai multe coloane, extindem ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Cu aceasta putem sorta colecția în funcție de mai multe coloane cu:
b45e29b9125c2ab565b5526442437686
Sortare standard
Extindem ConvenienceCollection cu o altă funcție auxiliară:
b45e29b9125c2ab565b5526442437686
Acum puteți oferi fiecărui model o funcție de sortare standard individuală:
b45e29b9125c2ab565b5526442437686
Deci putem sorta o colecție cu:
b45e29b9125c2ab565b5526442437686
Numele obiectelor
Fiecare model implementează metoda getLabel (getName variază în funcție de model):
b45e29b9125c2ab565b5526442437686
Cu aceasta puteți afișa rapid și ușor numele unui obiect. Apoi, puteți implementa metoda de ajutor sortByLabel în ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Rezultate goale
Dacă un pas intermediar este gol, funcțiile Laravel first () și last () returnează de obicei zero. Prin urmare, introducem getFirst () și getLast () astfel încât următorul apel să aibă întotdeauna succes:
b45e29b9125c2ab565b5526442437686
Cu aceasta, livrăm înapoi un ajutor __empty_ pe care __x îl recunoaște:
b45e29b9125c2ab565b5526442437686