Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Re bonjour!
Cette questions faite suite a celle ci http://www.z-f.fr/forum/viewtopic.php?id=9084 , mais comme j'ai indiqué que c'était résolut et que c'est un autre problème, je me permet d'ouvrir un autre file, dsl si j'aurai pas due (pas tapé).
Déjà, avec une simple association ManytoMany, voici le message d'erreur si l'on essaye d'appliquer un critère sur la collection
[lang=php] $myCollection->matching($myCrtieria) ; RuntimeException: Matching Criteria on PersistentCollection only works on OneToMany associations at the moment.
???? "At the moment?" Bon ba temps pis...
Pour moi la solution était donc de faire comme les association porteuse de donnée (surtout qu'une grand majorité des n.n sont porteuse de donée ^^):
On crée une entité intermédiaire, qui pourrai donner le schéma suivant:
EntityA --OneToMany : assocEntity assocEntity --ManyToOne : EntityA --ManyToOne : EntityB EntityB: --OneToMany: assocEntity
Du coté de l'entité A, on est bien dans un OneToMany et on a le droit d'utilisé les criteria...Mais la encore il y a une limitation:
pas moyen d'accèder au propriété de l'entité associé...
[lang=php] $myCriteria->where(Criteria::expr()->eq("EntityB.aProperty",$value)); $$myEntityA->getAssocCollection->matching($myCriteria);
Nous donne cette exception :
Unrecognized field: EntityB.aProperty
Je pense donc maintenant qu'il faille construire l'association a l’envers, c'est a dire :
EntityA --ManyToOne : assocEntity assocEntity --OneToMany : EntityA --OneToMany : EntityB EntityB: --ManyToOne: assocEntity
du coup on pourra faire en théorie:
[lang=php] $myCriteria->where(Criteria::expr()->eq("aProperty",$value)); $MyEntityA->getAssoc()->getEntityBCollection()->matching($myCriteria);
Mais je n'ai encore vue aucun tuto construire une association dans ce sens la
Tous sa pour en venir enfin a ma question:
ceci est il bien propre?
N'y a t'il pas une meilleur solution?
Comment faite vous?
Voila, j'espère que j'ai été clair...le cas contraire dite le moins je tacherai de prendre un exemple concret ^^
Hors ligne
Salut, je n'ai jamais fait comme ça pour ma part. Tu peux utiliser les Repository pour faire ta propre requête en DQL et filtrer directement au niveau de la requête .
Hors ligne
salut,
comme je fait jusqu’à maintenant donc...ce qui veut dire que je peut abandonné mon idée de départ?
a savoir pouvoir fait
$myEntityA->getMyCollection($limit = 10, $start = 100, $paramX = 'Y') comme je l'ai exposé ici ?
http://www.z-f.fr/forum/viewtopic.php?id=9084
Je trouve sa fort dommage de devoir passé par les repository a chaque foi qu'on a besoin d'une collection à filtrer...car dans certain cas la collection retourné par certaine popriété ManytoMany est beaucoup trop grosse pour être exploitable et doit obligatoirement être filtrer:
Pourquoi s'être embêter a spécifié le schéma de la propriété, la table join, les collone de jointure, faire une entité intermédiaire dans le cas des association porteuse de donnée... pour finalement ne jamais s'en servire? juste pour gérer l'ajout / retrait ? hmm....
Hors ligne