Trükkök a Laravel beszédes kapcsolataihoz

Laravel egyik erőssége az elegáns szintaxisa. Ha sok modellje és kapcsolata van a Laravel-ben (az adatbázisban lévő sok táblázat miatt), akkor a bejárás gyakran kevésbé elegáns kóddal zárulhat. Az idők folyamán három kis kiterjesztés bizonyított számomra, amelyeket az alábbiakban röviden bemutatnék. Csak néhány öröklési, mágikus módszert és egyedi gyűjteményt 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 felhívás tehát a fenti példában is lehetséges:

b45e29b9125c2ab565b5526442437686

Ellenőrizze az üres tárgyakat

Ha az ország nevét személyes címre kívánja kiírni, akkor gyakran a következő kódot fogja látni:

b45e29b9125c2ab565b5526442437686

Ahhoz, hogy ezt megakadályozzuk, mi tartalmazza a stringhelper könyvtár és visszaút egy speciális objektum az üres osztály üres, ha a modell nem található:

b45e29b9125c2ab565b5526442437686

Ez a hívást is sikeressé teszi (ebben a példában, ha valamit találunk, akkor 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 a \ Helpers \ ConvenienceCollection.php fájlalkalmazást , amely biztosítja, hogy a gyűjtemények ismeretlen függvényeinek meghívása végrehajtja a gyűjtemény összes elemének függvényét:

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ő hívás csak hely szerint rendeződik , bár valószínűleg nem ezt kívánta:

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