Uno dei punti di forza di Laravel è la sua sintassi elegante. Se in Laravel sono presenti molti modelli e relazioni (a causa di molte tabelle nel database), l'attraversamento può spesso terminare con un codice meno elegante. Nel corso del tempo si sono rivelate efficaci per me tre piccole estensioni, che vorrei presentarvi brevemente di seguito. Per fare questo usiamo solo eredità, metodi magici e raccolte personalizzate.
Per prima cosa creiamo un nuovo modello in app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
Quindi lasciamo che tutti i modelli ereditino dal nostro nuovo ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Mescola le tue funzioni con le relazioni
Se vuoi ottenere modelli connessi, usa la sintassi standard per chiamarli:
b45e29b9125c2ab565b5526442437686
Se ora aggiungi la tua logica aziendale, ti piace usare la notazione (inferiore) in maiuscolo:
b45e29b9125c2ab565b5526442437686
Vogliamo standardizzare la sintassi di entrambe le varianti. Per fare ciò, aggiungiamo il metodo magico __call a ConvenienceModel:
b45e29b9125c2ab565b5526442437686
Questa chiamata è possibile anche nell'esempio sopra:
b45e29b9125c2ab565b5526442437686
Controlla gli oggetti vuoti
Se si desidera visualizzare il nome del paese per l'indirizzo di una persona, spesso si vede il seguente codice:
b45e29b9125c2ab565b5526442437686
Per evitare ciò, includiamo la libreria stringhelper e restituiamo un oggetto speciale della classe vuota `empty` se non viene trovato un modello.:
b45e29b9125c2ab565b5526442437686
Ciò significa che la chiamata è andata a buon fine (in questo esempio se viene trovato qualcosa viene emesso il nome del paese, in tutti gli altri casi una stringa vuota):
b45e29b9125c2ab565b5526442437686
Se vogliamo anche coprire il caso in cui l'utente con l'ID 42 potrebbe anche non esistere, costruiremo anche una piccola funzione di aiuto per questo:
b45e29b9125c2ab565b5526442437686
La chiamata seguente fornisce quindi una stringa vuota anche se l'utente non esiste affatto:
b45e29b9125c2ab565b5526442437686
Attraversa convenientemente n: m relazioni
Infine, vogliamo semplificare il codice seguente:
b45e29b9125c2ab565b5526442437686
Per questo utilizziamo la possibilità di collezioni personalizzate . Per prima cosa stiamo espandendo il modello di convenienza:
b45e29b9125c2ab565b5526442437686
Successivamente, creiamo il file app\Helpers\ConvenienceCollection.php , che garantisce che quando vengono chiamate funzioni sconosciute nelle Collections, la funzione venga eseguita per tutti gli elementi della collection.:
b45e29b9125c2ab565b5526442437686
Quindi possiamo usare il seguente codice per produrre tutti i nomi di tutti i paesi di tutti gli indirizzi di tutti i genitori della persona:
b45e29b9125c2ab565b5526442437686
Ma sono possibili anche chiamate come le seguenti:
b45e29b9125c2ab565b5526442437686
Ordina per più colonne
Il seguente comando ordina solo in base alla posizione , sebbene probabilmente non fosse questo il risultato desiderato.:
b45e29b9125c2ab565b5526442437686
Per abilitare l'ordinamento in base a più colonne, stiamo espandendo la nostra ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Con ciò possiamo ordinare la raccolta in base a diverse colonne con:
b45e29b9125c2ab565b5526442437686
Ordinamento standard
Stiamo ampliando la ConvenienceCollection con un'altra funzione ausiliaria:
b45e29b9125c2ab565b5526442437686
Ora puoi assegnare a ciascun modello una funzione di ordinamento standard individuale:
b45e29b9125c2ab565b5526442437686
Quindi possiamo ordinare una raccolta con:
b45e29b9125c2ab565b5526442437686
Nomi degli oggetti
Ogni modello implementa il metodo getLabel (getName varia a seconda del modello):
b45e29b9125c2ab565b5526442437686
Con questo puoi visualizzare rapidamente e facilmente il nome di un oggetto. È quindi possibile implementare il metodo di supporto sortByLabel in ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
Risultati vuoti
Se un passaggio intermedio è vuoto, le funzioni di Laravel first () e last () solitamente restituiscono zero. Pertanto introduciamo getFirst () e getLast () in modo che la chiamata seguente abbia sempre successo:
b45e29b9125c2ab565b5526442437686
Con la presente restituiamo un __empty_helper che __x riconosce:
b45e29b9125c2ab565b5526442437686