Ruzoj por Laravel Elokventaj Rilatoj

Unu el la fortoj de Laravel estas ĝia eleganta sintakso. Se vi havas multajn modelojn kaj rilatojn en Laravel (pro multaj tabeloj en la datumbazo), trairi ofte povas finiĝi per malpli eleganta kodo. Kun la paso de tempo, tri malgrandaj etendaĵoj pruvis sin por mi, kiujn mi ŝatus koncize enkonduki sube. Ni nur uzas iom da heredo, magiaj metodoj kaj kutimaj kolektoj.


Unue ni kreas novan modelon sub app \ ConvenienceModel.php:

b45e29b9125c2ab565b5526442437686

Tiam ni lasas ĉiujn modelojn heredi de nia nova ConvenienceModel:

b45e29b9125c2ab565b5526442437686

Miksu viajn proprajn funkciojn kun rilatoj

Se vi volas akiri konektitajn modelojn, vi uzas la norman sintakson por nomi ilin:

b45e29b9125c2ab565b5526442437686

Se vi nun aldonas vian propran komercan logikon, vi ŝatas uzi la (malsupran) kamelan kazan skribmanieron:

b45e29b9125c2ab565b5526442437686

Ni volas normigi la sintakson de ambaŭ variantoj. Por fari tion, ni aldonas la magian metodon __call al la Konvena Modelo:

b45e29b9125c2ab565b5526442437686

Ĉi tiu alvoko do eblas ankaŭ en la supra ekzemplo:

b45e29b9125c2ab565b5526442437686

Kontrolu malplenajn objektojn

Se vi volas eldoni la nomon de la lando al persona adreso, vi ofte vidos la jenan kodon:

b45e29b9125c2ab565b5526442437686

Por malebligi ĉi tion, ni inkluzivas la bibliotekon stringhelper kaj redonas specialan objekton de la malplena klaso malplena se modelo ne troviĝas:

b45e29b9125c2ab565b5526442437686

Ĉi tio ankaŭ sukcesigas la alvokon (en ĉi tiu ekzemplo, se io troviĝas, la nomo de la lando estas eligita, en ĉiuj aliaj kazoj malplena ĉeno).

b45e29b9125c2ab565b5526442437686

Se ni ankaŭ volas pritrakti, ke la uzanto kun la ID 42 eble eĉ ne ekzistas, ni ankaŭ konstruos malgrandan helpan funkcion por ĉi tio:

b45e29b9125c2ab565b5526442437686

La sekva alvoko tiel liveras malplenan ĉenon eĉ se la uzanto tute ne ekzistas:

b45e29b9125c2ab565b5526442437686

Konvene trairu n: m-rilatojn

Fine ni volas simpligi la sekvan kodon:

b45e29b9125c2ab565b5526442437686

Por tio ni uzas la eblon de kutimaj kolektoj . Ni unue vastigas la oportunan modelon:

b45e29b9125c2ab565b5526442437686

Poste ni kreas la dosieron app \ Helpers \ ConvenienceCollection.php , kiu certigas, ke voki nekonatajn funkciojn en kolektoj plenumas la funkcion por ĉiuj eroj en la kolekto.:

b45e29b9125c2ab565b5526442437686

Do ni povas uzi la sekvan kodon por eligi ĉiujn nomojn de ĉiuj landoj de ĉiuj adresoj de ĉiuj gepatroj de la persono:

b45e29b9125c2ab565b5526442437686

Sed alvokoj kiel la jenaj ankaŭ eblas:

b45e29b9125c2ab565b5526442437686

Ordigi laŭ pluraj kolumnoj

La sekva alvoko nur ordigas laŭ loko , kvankam probable vi ne volis tion:

b45e29b9125c2ab565b5526442437686

Por ebligi ordigon laŭ pluraj kolumnoj, ni vastigas nian ConvenienceCollection:

b45e29b9125c2ab565b5526442437686

Per tio ni povas ordigi la kolekton laŭ pluraj kolumnoj kun:

b45e29b9125c2ab565b5526442437686

Norma ordigo

Ni pligrandigas la ConvenienceCollection kun alia helpa funkcio:

b45e29b9125c2ab565b5526442437686

Nun vi povas doni al ĉiu modelo individuan norman ordigan funkcion:

b45e29b9125c2ab565b5526442437686

Do ni povas ordigi kolekton per:

b45e29b9125c2ab565b5526442437686

Objektaj nomoj

Ĉiu modelo efektivigas la getLabel-metodon (getName varias laŭ la modelo):

b45e29b9125c2ab565b5526442437686

Per tio vi povas rapide kaj facile eligi la nomon de objekto. Vi povas tiam efektivigi la helpan metodon sortByLabel en la Konvenkolekto:

b45e29b9125c2ab565b5526442437686

Malplenaj rezultoj

Se meza paŝo estas malplena, la laravelaj funkcioj first () kaj last () kutime redonas nulon. Tial ni enkondukas getFirst () kaj getLast () por ke la sekva alvoko ĉiam sukcesu:

b45e29b9125c2ab565b5526442437686

Per ĉi tio ni redonas __ malplenan_helpilon, kiun __x rekonas:

b45e29b9125c2ab565b5526442437686

Reen