Trükkök a Laravel beszédes kapcsolataihoz

A Laravel egyik erőssége az elegáns szintaxis. Ha sok modelled és kapcsolatod van a Laravelben (az adatbázisban található sok tábla miatt), a bejárás gyakran kevésbé elegáns kóddal végződik. Idővel három kis bővítmény bizonyult számomra sikeresnek, amelyeket az alábbiakban szeretnék röviden bemutatni. Ehhez csak néhány öröklődést, mágikus módszereket és egyedi gyűjteményeket használunk.


Először létrehozunk egy új modellt az app \ ConvenienceModel.php alatt:

b45e29b9125c2ab565b5526442437686

Ezután hagyjuk, hogy az összes modell örököljön az új ConvenienceModelből:

b45e29b9125c2ab565b5526442437686

Keverje össze saját funkcióit a kapcsolatokkal

Ha csatlakoztatott modelleket szeretne beszerezni, a szokásos szintaxist használja a híváshoz:

b45e29b9125c2ab565b5526442437686

Ha most hozzáadja saját üzleti logikáját, akkor szívesen használja az (alsó) teve eset jelölését:

b45e29b9125c2ab565b5526442437686

Mindkét változat szintaxisát egységesíteni szeretnénk. Ehhez hozzáadjuk a __call mágikus módszert a ConvenienceModelhez:

b45e29b9125c2ab565b5526442437686

Ez a hívás a fenti példában is lehetséges:

b45e29b9125c2ab565b5526442437686

Ellenőrizze az üres tárgyakat

Ha egy személy címéhez tartozó országnevet szeretnéd kiírni, gyakran a következő kódot láthatod::

b45e29b9125c2ab565b5526442437686

Ennek elkerülése érdekében beillesztjük a stringhelper könyvtárat, és egy üres osztályú speciális objektumot adunk vissza, ha nem található modell.:

b45e29b9125c2ab565b5526442437686

Ez azt jelenti, hogy a hívás sikeres volt (ebben a példában, ha talál valamit, az ország neve jelenik meg, minden más esetben üres karakterlánc):

b45e29b9125c2ab565b5526442437686

Ha szeretnénk kitérni arra az esetre is, hogy a 42-es azonosítóval rendelkező felhasználó nem is létezik, akkor ehhez egy kis segítő funkciót is építünk:

b45e29b9125c2ab565b5526442437686

A következő hívás tehát akkor is üres karakterláncot nyújt, ha a felhasználó egyáltalán nem létezik:

b45e29b9125c2ab565b5526442437686

Kényelmesen áthalad az n: m kapcsolatokon

Végül le akarjuk egyszerűsíteni a következő kódot:

b45e29b9125c2ab565b5526442437686

Ehhez használjuk az egyedi gyűjtemények lehetőségét. Először bővítjük a kényelmi modellt:

b45e29b9125c2ab565b5526442437686

Ezután létrehozzuk az app\Helpers\ConvenienceCollection.php fájlt, amely biztosítja, hogy amikor ismeretlen függvényeket hívunk meg a Collectionsben, a függvény a gyűjtemény összes elemére végrehajtódjon.:

b45e29b9125c2ab565b5526442437686

Tehát a következő kód segítségével kimenhetjük az összes ország összes nevét, a személy összes szülőjének minden címét:

b45e29b9125c2ab565b5526442437686

De a következőhöz hasonló hívások is lehetségesek:

b45e29b9125c2ab565b5526442437686

Rendezés több oszlop szerint

A következő parancs csak helyszín szerint rendez, bár valószínűleg nem ez volt a kívánt eredmény.:

b45e29b9125c2ab565b5526442437686

A több oszlop szerinti rendezés engedélyezéséhez kibővítjük a ConvenienceCollection-t:

b45e29b9125c2ab565b5526442437686

Ezzel több oszlop szerint rendezhetjük a gyűjteményt a:

b45e29b9125c2ab565b5526442437686

Normál válogatás

Bővítjük a ConvenienceCollection-t egy másik kiegészítő funkcióval:

b45e29b9125c2ab565b5526442437686

Most minden modellnek megadhat egy egyedi szabványos rendezési funkciót:

b45e29b9125c2ab565b5526442437686

Így válogathatunk egy gyűjteményt:

b45e29b9125c2ab565b5526442437686

Tárgynevek

Minden modell a getLabel metódust valósítja meg (a getName a modelltől függően változik):

b45e29b9125c2ab565b5526442437686

Ezzel gyorsan és egyszerűen megjelenítheti az objektum nevét. Ezután megvalósíthatja a sortByLabel segítő módszert a ConvenienceCollection alkalmazásban:

b45e29b9125c2ab565b5526442437686

Üres eredmények

Ha egy köztes lépés üres, akkor a Laravel első () és utolsó () funkciói általában nullát adnak vissza. Ezért bevezetjük a getFirst () és a getLast () elemeket, hogy a következő hívás mindig sikeres legyen:

b45e29b9125c2ab565b5526442437686

Ezzel visszaküldünk egy __empty_helpert, amelyet __x felismer:

b45e29b9125c2ab565b5526442437686

Vissza