Een van Laravel's sterke punten is de elegante syntaxis. Als je veel modellen en relaties in Laravel hebt (vanwege veel tabellen in de database), kan traversing vaak eindigen in minder elegante code. In de loop van de tijd hebben zich voor mij drie kleine uitbreidingen bewezen, die ik hieronder kort wil introduceren. We gebruiken alleen wat overerving, magische methoden en aangepaste verzamelingen.
Eerst maken we een nieuw model onder app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Vervolgens laten we alle modellen erven van ons nieuwe ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Combineer uw eigen functies met relaties
Als u aangesloten modellen wilt krijgen, gebruikt u de standaardsyntaxis om ze op te roepen:
b45e29b9125c2ab565b5526442437686
Als je nu je eigen bedrijfslogica toevoegt, gebruik je graag de (lagere) camel case-notatie:
b45e29b9125c2ab565b5526442437686
We willen de syntaxis van beide varianten standaardiseren. Om dit te doen, voegen we de magische methode __call toe aan het ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Deze oproep is dus ook mogelijk in bovenstaand voorbeeld:
b45e29b9125c2ab565b5526442437686
Controleer lege objecten
Als u de naam van het land naar een persoonlijk adres wilt uitvoeren, ziet u vaak de volgende code:
b45e29b9125c2ab565b5526442437686
Om dit te voorkomen, nemen we de stringhelper- bibliotheek op en retourneren we een speciaal object van de lege klasse leeg als er geen model wordt gevonden:
b45e29b9125c2ab565b5526442437686
Dit maakt de oproep ook succesvol (in dit voorbeeld, als er iets wordt gevonden, wordt de naam van het land weergegeven, in alle andere gevallen een lege string).
b45e29b9125c2ab565b5526442437686
Als we ook het geval willen dekken dat de gebruiker met ID 42 misschien niet eens bestaat, zullen we hiervoor ook een kleine hulpfunctie bouwen:
b45e29b9125c2ab565b5526442437686
De volgende aanroep levert dus een lege string op, zelfs als de gebruiker helemaal niet bestaat:
b45e29b9125c2ab565b5526442437686
Doorkruis gemakkelijk n: m relaties
Ten slotte willen we de volgende code vereenvoudigen:
b45e29b9125c2ab565b5526442437686
Hiervoor maken wij gebruik van de mogelijkheid van custom collecties . We breiden eerst het gemaksmodel uit:
b45e29b9125c2ab565b5526442437686
Vervolgens maken we het bestand app \ Helpers \ ConvenienceCollection.php , dat ervoor zorgt dat het aanroepen van onbekende functies in verzamelingen de functie uitvoert voor alle items in de verzameling:
b45e29b9125c2ab565b5526442437686
We kunnen dus de volgende code gebruiken om alle namen van alle landen of alle adressen van alle ouders van de persoon uit te voeren:
b45e29b9125c2ab565b5526442437686
Maar oproepen zoals de volgende zijn ook mogelijk:
b45e29b9125c2ab565b5526442437686
Sorteer op meerdere kolommen
De volgende oproep wordt alleen op locatie gesorteerd , hoewel dat waarschijnlijk niet was wat u wilde:
b45e29b9125c2ab565b5526442437686
Om sorteren op meerdere kolommen mogelijk te maken, breiden we onze ConvenienceCollection uit:
b45e29b9125c2ab565b5526442437686
Daarmee kunnen we de collectie sorteren op meerdere kolommen met:
b45e29b9125c2ab565b5526442437686
Standaard sortering
We breiden de ConvenienceCollection uit met een andere hulpfunctie:
b45e29b9125c2ab565b5526442437686
Nu kunt u elk model een individuele standaard sorteerfunctie geven:
b45e29b9125c2ab565b5526442437686
Zodat we een collectie kunnen sorteren met:
b45e29b9125c2ab565b5526442437686
Object namen
Elk model implementeert de methode getLabel (getName varieert afhankelijk van het model):
b45e29b9125c2ab565b5526442437686
Hiermee kunt u snel en eenvoudig de naam van een object uitvoeren. U kunt vervolgens de sortByLabel-helper-methode implementeren in de ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Lege resultaten
Als een tussenstap leeg is, retourneren de Laravel-functies first () en last () meestal nul. Daarom introduceren we getFirst () en getLast () zodat de volgende aanroep altijd slaagt:
b45e29b9125c2ab565b5526442437686
Hiermee leveren we een __empty_helper terug die __x herkent:
b45e29b9125c2ab565b5526442437686