Truket për marrëdhëniet elokuente Laravel

Një nga pikat e forta të Laravel është sintaksa 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), përshkimi shpesh mund të përfundojë në një kod më pak elegant. Me kalimin e kohës, tre shtesa të vogla kanë provuar veten për mua, të cilat do t'i prezantoj shkurtimisht më poshtë. Ne thjesht përdorim disa trashëgimi, metoda magjike dhe koleksione të personalizuara.


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 dëshironi të jepni emrin e vendit në adresën e një personi, shpesh do të shihni kodin e mëposhtëm:

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

Kjo gjithashtu e bën thirrjen të suksesshme (në këtë shembull, nëse diçka gjendet, emri i vendit del, 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

Pastaj krijojmë aplikacionin e skedarit \ Ndihmësit \ ConvenienceCollection.php , i cili siguron që thirrja e funksioneve të panjohura në koleksione ekzekuton funksionin për të gjithë 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

Thirrja e mëposhtme klasifikon vetëm sipas vendndodhjes , megjithëse kjo ndoshta nuk ishte ajo që dëshironi:

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