Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-05-2014 13:15:05

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Criteria sur la collection d'un champ ManyToMany

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

Code:

[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:

Code:

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é...

Code:

[lang=php]
$myCriteria->where(Criteria::expr()->eq("EntityB.aProperty",$value));
$$myEntityA->getAssocCollection->matching($myCriteria);

Nous donne cette exception :

Code:

Unrecognized field: EntityB.aProperty

Je pense donc maintenant qu'il faille construire l'association a l’envers, c'est a dire :

Code:

EntityA
--ManyToOne : assocEntity

assocEntity
--OneToMany : EntityA
--OneToMany : EntityB

EntityB:
--ManyToOne: assocEntity

du coup on pourra faire en théorie:

Code:

[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 big_smile

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

 

#2 01-05-2014 17:16:54

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Criteria sur la collection d'un champ ManyToMany

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 wink.

Hors ligne

 

#3 02-05-2014 14:44:28

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Criteria sur la collection d'un champ ManyToMany

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages