Κόλπα για Έλληνες σχέσεις Laravel

Ένα από τα πλεονεκτήματα του Laravel είναι η κομψή σύνταξή του. Εάν έχετε πολλά μοντέλα και σχέσεις στο Laravel (λόγω πολλών πινάκων στη βάση δεδομένων), η διέλευση μπορεί συχνά να καταλήγει σε λιγότερο κομψό κώδικα. Με την πάροδο του χρόνου, τρεις μικρές επεκτάσεις απέδειξαν την αξία τους για μένα, τις οποίες θα ήθελα να παρουσιάσω εν συντομία παρακάτω. Απλώς χρησιμοποιούμε κάποια κληρονομιά, μαγικές μεθόδους και προσαρμοσμένες συλλογές.


Αρχικά δημιουργούμε ένα νέο μοντέλο στην εφαρμογή \ ConvenienceModel.php:

b45e29b9125c2ab565b5526442437686

Στη συνέχεια, αφήσαμε όλα τα μοντέλα να κληρονομήσουν από το νέο μας ConvenienceModel:

b45e29b9125c2ab565b5526442437686

Ανακατέψτε τις δικές σας λειτουργίες με σχέσεις

Αν θέλετε να αποκτήσετε συνδεδεμένα μοντέλα, χρησιμοποιείτε την τυπική σύνταξη για να τα καλέσετε:

b45e29b9125c2ab565b5526442437686

Εάν προσθέσετε τώρα τη δική σας επιχειρηματική λογική, θέλετε να χρησιμοποιήσετε την (κάτω) σημείωση καμήλας:

b45e29b9125c2ab565b5526442437686

Θέλουμε να τυποποιήσουμε τη σύνταξη και των δύο παραλλαγών. Για να το κάνουμε αυτό, προσθέτουμε τη μαγική μέθοδο __call στο ConvenienceModel:

b45e29b9125c2ab565b5526442437686

Επομένως, αυτή η κλήση είναι επίσης δυνατή στο παραπάνω παράδειγμα:

b45e29b9125c2ab565b5526442437686

Ελέγξτε τα κενά αντικείμενα

Εάν θέλετε να εξάγετε το όνομα της χώρας σε μια προσωπική διεύθυνση, συχνά θα βλέπετε τον ακόλουθο κωδικό:

b45e29b9125c2ab565b5526442437686

Για να αποφευχθεί αυτό, θα περιλαμβάνουν την stringhelper βιβλιοθήκη και να επιστρέψει ένα ειδικό αντικείμενο του κενού τάξης άδειο αν ένα μοντέλο δεν έχει βρεθεί:

b45e29b9125c2ab565b5526442437686

Αυτό κάνει επίσης την κλήση επιτυχημένη (σε αυτό το παράδειγμα, αν βρεθεί κάτι, το όνομα της χώρας εξάγεται, σε όλες τις άλλες περιπτώσεις μια κενή συμβολοσειρά).

b45e29b9125c2ab565b5526442437686

Εάν θέλουμε επίσης να καλύψουμε την περίπτωση που ο χρήστης με αναγνωριστικό 42 μπορεί να μην υπάρχει καν, θα δημιουργήσουμε επίσης μια μικρή λειτουργία βοηθού για αυτό:

b45e29b9125c2ab565b5526442437686

Η ακόλουθη κλήση παρέχει έτσι μια κενή συμβολοσειρά ακόμη και αν ο χρήστης δεν υπάρχει καθόλου:

b45e29b9125c2ab565b5526442437686

Βολικά διασχίζουν σχέσεις n: m

Τέλος, θέλουμε να απλοποιήσουμε τον ακόλουθο κώδικα:

b45e29b9125c2ab565b5526442437686

Γι 'αυτό χρησιμοποιούμε τη δυνατότητα προσαρμοσμένων συλλογών . Επεκτείνουμε πρώτα το μοντέλο ευκολίας:

b45e29b9125c2ab565b5526442437686

Στη συνέχεια, δημιουργούμε την εφαρμογή αρχείου \ Helpers \ ConvenienceCollection.php , η οποία διασφαλίζει ότι η κλήση άγνωστων συναρτήσεων σε συλλογές εκτελεί τη λειτουργία για όλα τα στοιχεία της συλλογής:

b45e29b9125c2ab565b5526442437686

Μπορούμε λοιπόν να χρησιμοποιήσουμε τον ακόλουθο κώδικα για να εξάγουμε όλα τα ονόματα όλων των χωρών όλων των διευθύνσεων όλων των γονέων του ατόμου:

b45e29b9125c2ab565b5526442437686

Ωστόσο, είναι επίσης δυνατές κλήσεις όπως οι παρακάτω:

b45e29b9125c2ab565b5526442437686

Ταξινόμηση κατά πολλές στήλες

Η ακόλουθη κλήση ταξινομείται μόνο ανά τοποθεσία , αν και αυτό πιθανώς δεν ήταν αυτό που θέλετε:

b45e29b9125c2ab565b5526442437686

Επεκτείνουμε το ConvenienceCollection για να επιτρέψουμε την ταξινόμηση κατά πολλές στήλες:

b45e29b9125c2ab565b5526442437686

Με αυτό μπορούμε να ταξινομήσουμε τη συλλογή σύμφωνα με πολλές στήλες με:

b45e29b9125c2ab565b5526442437686

Τυπική ταξινόμηση

Επεκτείνουμε το ConvenienceCollection με μια άλλη βοηθητική λειτουργία:

b45e29b9125c2ab565b5526442437686

Τώρα μπορείτε να δώσετε σε κάθε μοντέλο μια μεμονωμένη τυπική λειτουργία ταξινόμησης:

b45e29b9125c2ab565b5526442437686

Έτσι μπορούμε να ταξινομήσουμε μια συλλογή με:

b45e29b9125c2ab565b5526442437686

Ονόματα αντικειμένων

Κάθε μοντέλο εφαρμόζει τη μέθοδο getLabel (το getName διαφέρει ανάλογα με το μοντέλο):

b45e29b9125c2ab565b5526442437686

Με αυτό μπορείτε να εμφανίσετε γρήγορα και εύκολα το όνομα ενός αντικειμένου. Στη συνέχεια, μπορείτε να εφαρμόσετε τη μέθοδο βοηθού sortByLabel στο ConvenienceCollection:

b45e29b9125c2ab565b5526442437686

Κενά αποτελέσματα

Εάν ένα ενδιάμεσο βήμα είναι κενό, το Laravel λειτουργεί πρώτα () και τελευταίο () επιστρέφει συνήθως μηδέν. Επομένως, παρουσιάζουμε το getFirst () και το getLast () έτσι ώστε η ακόλουθη κλήση να πετυχαίνει πάντα:

b45e29b9125c2ab565b5526442437686

Με αυτό παραδίδουμε ένα __empty_helper που αναγνωρίζει το __x:

b45e29b9125c2ab565b5526442437686

Πίσω