Η διαφορά μεταξύ της «morphtomany» και του «morphedbymany» σε πολυμορφικές σχέσεις πολλών προς πολλές σε πολλές προς πολλές είναι κυρίως στους ρόλους τους στη σχέση και στον τρόπο με τον οποίο οι δομές της βάσης δεδομένων τους υποστηρίζουν.
Δομή βάσης δεδομένων σε πολυμορφικά πολλά προς πολλά
Οι πολυμορφικές σχέσεις πολλών προς πολλές περιλαμβάνουν τρεις κύριους πίνακες:
- Δύο πίνακες μοντέλων (π.χ., `post` και` ετικέτες ')
- Ένας ενδιάμεσος πίνακας περιστροφής (π.χ. `taggables ')
Ο πίνακας περιστροφής περιέχει τουλάχιστον τρεις στήλες:
- `tag_id` (το αναγνωριστικό του σχετικού μοντέλου, π.χ. ετικέτα)
- `taggable_id` (το αναγνωριστικό του μοντέλου που σχετίζεται με την ετικέτα, π.χ. post ή βίντεο)
- `taggable_type` (το όνομα της κλάσης ή τον τύπο του σχετικού μοντέλου, π.χ. app \ model \ post` ή` app \ model \ video`)
Αυτή η δομή επιτρέπει σε έναν μόνο πίνακα περιστροφής να συσχετίζει πολλαπλά διαφορετικά μοντέλα με ένα κοινό μοντέλο (ετικέτες σε αυτή την περίπτωση) χωρίς να χρειάζεται ξεχωριστούς πίνακες περιστροφής για κάθε συνδυασμό μοντέλου [5] [9].
Ρόλος του `morphtomany '
- Χρησιμοποιείται στο μοντέλο που "κατέχει" ή "έχει" την πολυμορφική σχέση.
- Ορίζει τη σχέση από την οπτική γωνία του μοντέλου που σχετίζεται με πολλά άλλα μοντέλα.
- Για παράδειγμα, σε ένα μοντέλο `post`, η μέθοδος` tags () `χρησιμοποιεί` morphtomany` για να πάρει όλες τις ετικέτες που σχετίζονται με αυτή τη θέση.
- Αυτή η μέθοδος καθορίζει το σχετικό μοντέλο και το "morph name" (π.χ. `'taggable' ''), το οποίο αντιστοιχεί στις στήλες πίνακα περιστροφής (` taggable_id` και `taggable_type ').
- Αναρωτιέται το φιλτράρισμα πίνακα περιστροφής από το αναγνωριστικό και τον τύπο του τρέχοντος μοντέλου για να βρει σχετικά μοντέλα [5] [9].
Ρόλος του «morphedbymany»
- Χρησιμοποιείται στο μοντέλο που είναι ο στόχος της πολυμορφικής σχέσης.
-Ορίζει την αντίστροφη πλευρά της πολυμορφικής σχέσης πολλών προς πολλή.
- Για παράδειγμα, στο μοντέλο `tag`, μέθοδοι όπως` posts () `ή` videos () `χρησιμοποιήστε 'morphedbymany` για να πάρετε όλες τις αναρτήσεις ή τα βίντεο που σχετίζονται με αυτήν την ετικέτα.
- Καθορίζει τη σχετική κλάση μοντέλου και το ίδιο όνομα μορφής που χρησιμοποιείται στο `morphtomany '.
- Αυτή η μέθοδος ερωτά το φιλτράρισμα πίνακα περιστροφής από τον τύπο και το αναγνωριστικό του σχετικού μοντέλου για να βρείτε όλα τα μοντέλα αυτού του τύπου που σχετίζονται με το τρέχον μοντέλο (ετικέτα) [5] [9].
Περίληψη των διαφορών στους όρους βάσης δεδομένων
- `morphtomany` καλείται στο μοντέλο που σχετίζεται με πολλούς άλλους και χρησιμοποιεί τις στήλες του πίνακα περιστροφών` taggable_id` και `taggable_type` για να φιλτράρουν αρχεία όπου η` taggable_type` ταιριάζει με την κλάση του τρέχοντος μοντέλου.
- `morphedbymany` καλείται στο μοντέλο που σχετίζεται με το (το αντίστροφο) και χρησιμοποιεί τον πίνακα περιστροφής για να βρει όλα τα μοντέλα ενός συγκεκριμένου τύπου που σχετίζονται με το τρέχον μοντέλο.
Και οι δύο μέθοδοι χρησιμοποιούν τον ίδιο πίνακα περιστροφής, αλλά διαφέρουν στην κατεύθυνση της σχέσης που αντιπροσωπεύουν. Ο πίνακας περιστροφής παραμένει ο ίδιος, με στήλες για το αναγνωριστικό και τον τύπο του σχετικού μοντέλου, επιτρέποντας τη σύνδεση πολλαπλών τύπων μοντέλων που συνδέονται με πολυμορφικά μέσω ενός μόνο πίνακα.
Στην ουσία, το `morphtomany` ορίζει τη σχέση από την πλευρά του μοντέλου" γονέα "ή" ιδιοκτησίας ", ενώ το" morphedbymany` ορίζει την αντίστροφη σχέση από την "σχετική" πλευρά του μοντέλου, και οι δύο βασίζονται στην ίδια πολυμορφική δομή πίνακα περιστροφής [5] [9] [1].
Αναφορές:
[1] https://laracasts.com/discuss/channels/laravel/difference-between- Standard-Polymorphic-many-to-Many-Polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-extened/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplificing-many-to-ny-relationships-with-laravel-polymorphic-relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-nany-to-many-relationship-pivot-table-with-to-a
[9] https://blog.logrockocket.com/polymorphic relationships-laravel/