PHP ActiveRecord - Impossible de trouver l'association dans le modèle
-
12-12-2019 - |
Question
J'utilise Codeigniter 2.1.0 avec le spark pour activer PHP ActiveRecord et je suis incapable de créer une association plusieurs à plusieurs via une table de recherche.Chaque fois que je charge le modèle d'événement, il échoue avec "Impossible de trouver les catégories d'événements d'association dans le modèle d'événement", qui est une exception ActiveRecord\HasManyThroughAssociationException.
Conformément à ce sujet J'ai essayé de mettre à jour ma source avec ce patch sans effet.
j'ai aussi suivi ce fil et j'ai basé mon association sur la solution qui y est donnée.
J'ai fini avec le SQL suivant : http://pastebin.com/ya65VWHCet les modèles suivants : http://pastebin.com/XEDTb6KS
J'essaie d'associer un événement à plusieurs catégories, par exemple un événement de match de football pourrait avoir les catégories « sports », « famille » et « divertissement ».
Ai-je raté quelque chose de fondamental ?
La solution
Je ne suis pas en mesure de tout tester car je n'ai pas de base de données dans laquelle je pourrais vider votre code (et je n'ai pas non plus de données de test :) ), mais votre code présente quelques différences avec le manuel.
Si vous regardez cette page : http://www.phpactiverecord.org/projects/main/wiki/Associations#has_many_through
Vous voyez trois tableaux, cette carte comme celle-ci (je pense)
Order -> Category
Payment -> Eventcategory
User -> Event
UN Category
a plusieurs Events
à travers Eventcategory
, tout comme un Order
a plusieurs Users
à travers Payment
dans l'exemple.L’inverse est défini de manière plus basique (un User
a Orders
)
Là où vous avez défini 2 relations "through", cet exemple n'en a qu'une dans le Order
classe, quittant le user
avec juste un has_many
.C'est une grande différence que vous devrez peut-être aborder, je pense.
De plus, je ne suis pas vraiment sûr du foreign_key
définitions que vous faites dans cette partie :
array('events', 'foreign_key' => 'event_id',
array('through' => 'eventcategories', 'foreign_key' => 'event_id')
Si vous disposez du schéma de dénomination par défaut, vous n'avez pas besoin de vous soucier de les nommer explicitement.
Pour résoudre ce problème, je commencerais par l'exemple de commande/utilisateur/paiement, vérifierais qu'il fonctionne pour vous, puis remplacerais toutes les pièces (soigneusement :)) pour qu'il devienne votre code.