En av Laravels styrkor är dess eleganta syntax. Om du har många modeller och relationer i Laravel (på grund av många tabeller i databasen) kan traversering ofta sluta med mindre elegant kod. Med tiden har tre små tillägg visat sig för mig, som jag kort vill presentera nedan. Vi använder bara några arv, magiska metoder och anpassade samlingar.
Först skapar vi en ny modell under app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Sedan låter vi alla modeller ärva från vår nya ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Blanda dina egna funktioner med relationer
Om du vill få anslutna modeller använder du standardsyntaxen för att ringa dem:
b45e29b9125c2ab565b5526442437686
Om du nu lägger till din egen affärslogik vill du använda (nedre) kamelnotationen:
b45e29b9125c2ab565b5526442437686
Vi vill standardisera syntaxen för båda varianterna. För att göra detta lägger vi till den magiska metoden __call till ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Detta samtal är därför också möjligt i exemplet ovan:
b45e29b9125c2ab565b5526442437686
Kontrollera tomma föremål
Om du vill mata ut namnet på landet till en persons adress ser du ofta följande kod:
b45e29b9125c2ab565b5526442437686
För att förhindra detta inkluderar vi stringhelper- biblioteket och returnerar ett specialobjekt av den tomma klassen tom om en modell inte hittas:
b45e29b9125c2ab565b5526442437686
Detta gör också att samtalet lyckas (i det här exemplet, om något hittas, matas landets namn ut, i alla andra fall en tom sträng).
b45e29b9125c2ab565b5526442437686
Om vi också vill täcka fallet att användaren med ID 42 kanske inte ens finns, kommer vi också att bygga en liten hjälpfunktion för detta:
b45e29b9125c2ab565b5526442437686
Följande samtal levererar således en tom sträng även om användaren inte existerar alls:
b45e29b9125c2ab565b5526442437686
Bekvämt korsar n: m-relationer
Slutligen vill vi förenkla följande kod:
b45e29b9125c2ab565b5526442437686
För detta använder vi möjligheten till anpassade samlingar . Vi utökar först bekvämlighetsmodellen:
b45e29b9125c2ab565b5526442437686
Sedan skapar vi filappen \ Helpers \ ConvenienceCollection.php , vilket säkerställer att anropa okända funktioner i samlingar kör funktionen för alla objekt i samlingen:
b45e29b9125c2ab565b5526442437686
Så vi kan använda följande kod för att mata ut alla namn i alla länder på alla adresser till personens föräldrar:
b45e29b9125c2ab565b5526442437686
Men samtal som följande är också möjliga:
b45e29b9125c2ab565b5526442437686
Sortera efter flera kolumner
Följande samtal sorterar bara efter plats , även om det förmodligen inte var det du ville ha:
b45e29b9125c2ab565b5526442437686
För att möjliggöra sortering enligt flera kolumner utökar vi vår ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Med det kan vi sortera samlingen efter flera kolumner med:
b45e29b9125c2ab565b5526442437686
Standard sortering
Vi utökar ConvenienceCollection med en annan hjälpfunktion:
b45e29b9125c2ab565b5526442437686
Nu kan du ge varje modell en individuell standardsorteringsfunktion:
b45e29b9125c2ab565b5526442437686
Med detta kan vi sortera en samling med:
b45e29b9125c2ab565b5526442437686
Objektnamn
Varje modell implementerar getLabel-metoden (getName varierar beroende på modell):
b45e29b9125c2ab565b5526442437686
Med detta kan du snabbt och enkelt mata ut namnet på ett objekt. Du kan sedan implementera sortByLabel-hjälparmetoden i ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Tomma resultat
Om ett mellansteg är tomt, fungerar Laravel först () och sista () brukar returnera noll. Därför introducerar vi getFirst () och getLast () så att följande samtal alltid lyckas:
b45e29b9125c2ab565b5526442437686
Härmed levererar vi tillbaka en __empty_helper som __x känner igen:
b45e29b9125c2ab565b5526442437686