Trucchi per Laravel Eloquent Relationships

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

Indietro