Truket për marrëdhëniet elokuente Laravel

Një nga pikat e forta të Laravel është sintaksa e tij elegante. Nëse keni shumë modele dhe marrëdhënie në Laravel (për shkak të shumë tabelave në bazën e të dhënave), kalimi shpesh mund të përfundojë në kod më pak elegant. Me kalimin e kohës, tre zgjerime të vogla kanë rezultuar të suksesshme për mua, të cilat do të doja t'i prezantoja shkurtimisht më poshtë. Për ta bërë këtë, ne thjesht përdorim disa metoda të trashëgimisë, magjike dhe koleksione me porosi.


Së pari ne krijojmë një model të ri nën aplikacionin \ ConvenienceModel.php:

b45e29b9125c2ab565b5526442437686

Pastaj ne le të gjitha modelet trashëgojnë nga ConvenienceModel tonë të ri:

b45e29b9125c2ab565b5526442437686

Përzieni funksionet tuaja me marrëdhëniet

Nëse dëshironi të merrni modele të lidhura, përdorni sintaksën standarde për t'i thirrur ato:

b45e29b9125c2ab565b5526442437686

Nëse tani shtoni logjikën tuaj të biznesit, ju pëlqeni të përdorni shënimin e rastit të devesë:

b45e29b9125c2ab565b5526442437686

Ne duam të standardizojmë sintaksën e të dy varianteve. Për ta bërë këtë, ne shtojmë metodën magjike __thirrjeModeli i Përshtatjes:

b45e29b9125c2ab565b5526442437686

Kjo thirrje është gjithashtu e mundur në shembullin e mësipërm:

b45e29b9125c2ab565b5526442437686

Kontrolloni objektet bosh

Nëse doni të nxirrni emrin e vendit për adresën e një personi, shpesh shihni kodin e mëposhtëm:

b45e29b9125c2ab565b5526442437686

Për ta parandaluar këtë, ne përfshijmë bibliotekën stringhelper dhe kthejmë një objekt të veçantë të klasës bosh `empty` nëse nuk gjendet një model.:

b45e29b9125c2ab565b5526442437686

Kjo do të thotë që thirrja është e suksesshme (në këtë shembull, nëse gjendet diçka, del emri i shtetit, në të gjitha rastet e tjera një varg bosh):

b45e29b9125c2ab565b5526442437686

Nëse ne gjithashtu duam të mbulojmë rastin që përdoruesi me ID 42 mund të mos ekzistojë, ne gjithashtu do të ndërtojmë një funksion të vogël ndihmës për këtë:

b45e29b9125c2ab565b5526442437686

Thirrja e mëposhtme jep kështu një varg bosh edhe nëse përdoruesi nuk ekziston fare:

b45e29b9125c2ab565b5526442437686

Kaloni lehtësisht marrëdhëniet n: m

Së fundmi, ne duam të thjeshtojmë kodin e mëposhtëm:

b45e29b9125c2ab565b5526442437686

Për këtë ne përdorim mundësinë e koleksioneve me porosi . Së pari po zgjerojmë modelin e komoditetit:

b45e29b9125c2ab565b5526442437686

Më pas, krijojmë skedarin app\Helpers\ConvenienceCollection.php , i cili siguron që kur thirren funksione të panjohura në Koleksione, funksioni ekzekutohet për të gjitha artikujt në koleksion.:

b45e29b9125c2ab565b5526442437686

Kështu që ne mund të përdorim kodin e mëposhtëm për të nxjerrë të gjithë emrat e të gjitha vendeve të të gjitha adresave të të gjithë prindërve të personit:

b45e29b9125c2ab565b5526442437686

Por thirrje si më poshtë janë gjithashtu të mundshme:

b45e29b9125c2ab565b5526442437686

Rendit sipas kolonave të shumëfishta

Komanda e mëposhtme rendit vetëm sipas vendndodhjes , megjithëse ky ndoshta nuk ishte rezultati i synuar.:

b45e29b9125c2ab565b5526442437686

Për të mundësuar klasifikimin sipas disa kolonave, ne po zgjerojmë mbledhjen tonë të komoditetit:

b45e29b9125c2ab565b5526442437686

Me këtë ne mund ta renditim koleksionin sipas disa kolonave me:

b45e29b9125c2ab565b5526442437686

Renditja standarde

Ne po zgjerojmë ConvenienceCollection me një funksion tjetër ndihmës:

b45e29b9125c2ab565b5526442437686

Tani ju mund t'i jepni secilit model një funksion individual të klasifikimit standard:

b45e29b9125c2ab565b5526442437686

Kështu që ne mund të klasifikojmë një koleksion me:

b45e29b9125c2ab565b5526442437686

Emrat e objekteve

Secili model zbaton metodën getLabel (emri i getN ndryshon në varësi të modelit):

b45e29b9125c2ab565b5526442437686

Me këtë ju mund të shfaqni shpejt dhe me lehtësi emrin e një objekti. Pastaj mund të implementoni metodën ndihmëse të sortByLabel në ConvenienceCollection:

b45e29b9125c2ab565b5526442437686

Rezultatet boshe

Nëse një hap i ndërmjetëm është bosh, funksionet e para () dhe të fundit () të Laravel kthehen zero. Prandaj ne prezantojmë getFirst () dhe getLast () në mënyrë që thirrja vijuese të ketë gjithmonë sukses:

b45e29b9125c2ab565b5526442437686

Me anë të kësaj ne sjellim përsëri një ndihmës __brazët që __x njeh:

b45e29b9125c2ab565b5526442437686

Mbrapa