Trucchi per Laravel Eloquent Relationships

Uno dei punti di forza di Laravel è la sua sintassi elegante. Se hai molti modelli e relazioni in Laravel (a causa di molte tabelle nel database), l'attraversamento può spesso finire in codice meno elegante. Nel corso del tempo, tre piccole estensioni si sono dimostrate valide per me, che presenterò brevemente di seguito. Usiamo solo alcune 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 è quindi possibile anche nell'esempio sopra:

b45e29b9125c2ab565b5526442437686

Controlla gli oggetti vuoti

Se desideri inviare il nome del paese a un indirizzo personale, vedrai spesso il codice seguente:

b45e29b9125c2ab565b5526442437686

Per evitare ciò, includiamo la libreria stringhelper e restituiamo un oggetto speciale della classe vuota vuota se non viene trovato un modello:

b45e29b9125c2ab565b5526442437686

Questo fa anche sì che la chiamata abbia successo (in questo esempio, se viene trovato qualcosa, viene visualizzato 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

Quindi creiamo il file app \ Helpers \ ConvenienceCollection.php , che garantisce che la chiamata di funzioni sconosciute nelle raccolte esegua la funzione per tutti gli elementi nella raccolta:

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

La chiamata seguente viene ordinata solo in base alla località , anche se probabilmente non era quello che volevi:

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