Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-07-2014 11:38:23

pconrad
Membre
Date d'inscription: 29-04-2014
Messages: 20

[Doctrine 2] Problème de cache et select

Bonjour,

Je me retrouve confronté à un problème bizarre depuis hier.
J'ai un champs d'une table en relation avec une table de choix avec contrainte, qui est le type d'élément. J'utilise dont un 'select' en remplissant 'value_options' avec les valeurs de la table de choix.
Quand j'affiche le formulaire de saisie, le 'select' n'a pas toujours la bonne valeur affiché !?

En utilisant 'var_dump', quand la donnée est correcte, on peut voir 'object(Datas\Model\HtElement').
Quand la valeur est fausse, on a 'object(DoctrineORMModule\Proxy\__CG__\Datas\Model\HtElement)'. Donc la valeur de l'objet renvoyé n'est pas interpréter par le 'render' du select.....

Voila la définition du champs :

Code:

[lang=php]/**
     * @var \Datas\Model\HtElement
     * 
     * @ORM\ManyToOne(targetEntity="Datas\Model\HtElement")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="ELEMENT_TYPE_ID",referencedColumnName="ID")
     * })
     */
    private $elementType;

Pourquoi une partie des données est en cache et pas d'autres ?
Les jointures sont faites avec le QueryBuilder.

Je ne sais pas comment m'en sortir !

Dernière modification par pconrad (08-07-2014 11:39:18)

Hors ligne

 

#2 08-07-2014 11:56:26

pconrad
Membre
Date d'inscription: 29-04-2014
Messages: 20

Re: [Doctrine 2] Problème de cache et select

Ou plutôt comme question, pourquoi Doctrine utilise le proxy pour certaines valeurs, et pas d'autres...

Hors ligne

 

#3 08-07-2014 12:06:22

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [Doctrine 2] Problème de cache et select

Bonjour,
La jointure dans ta requete est en fetch lazy ou fetch Eager ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#4 08-07-2014 13:42:31

pconrad
Membre
Date d'inscription: 29-04-2014
Messages: 20

Re: [Doctrine 2] Problème de cache et select

JGreco a écrit:

Bonjour,
La jointure dans ta requete est en fetch lazy ou fetch Eager ?

Dans les 2 cas, c'est pareil. (honnêtement, je ne m'était jamais posé la question....)

Un des type est utilisé près de 90% du temps. Avant l'affichage de la fiche, les données sont sélectionnée dans une liste. Le proxy utilise peut être le pourcentage d'apparition de cette valeur dans la liste. C'est vraiment bizarre comme comportement.

Une solution consisterait à recoder un 'select' spécifique pour cette tache...

Hors ligne

 

#5 08-07-2014 13:55:32

pconrad
Membre
Date d'inscription: 29-04-2014
Messages: 20

Re: [Doctrine 2] Problème de cache et select

A noter que dans les options du 'select', on retrouve 'selected' partout !

Comme si il avait fait une sélection de tous les éléments.

Hors ligne

 

#6 09-07-2014 08:54:01

pconrad
Membre
Date d'inscription: 29-04-2014
Messages: 20

Re: [Doctrine 2] Problème de cache et select

Bonjour,

J'ai enfin trouvé mon problème.

Sur des jointures, Doctrine place un objet correspondant à la table liée. Normal....
Sur mon champs :

Code:

FitCSO->elementType = Datas\Model\HtElement [
'Datas\Model\HtElement\id' => integer =10
'Datas\Model\HtElement\description' => string = 'Tube'
]

Dans le cas d'un utilisation d'un objet du proxy :

Code:

FitCSO->elementType = Proxy\__CG__\Datas\Model\HtElement [
'__initializer__' => null
'__cloner__' => null
'__isInitialized__' => boolean=true
'Datas\Model\HtElement\id' => integer=10
'Datas\Model\HtElement\description' => string='Tube'
]

Dans la classe FormSelect on a :

Code:

[lang=php]public function renderOptions(array $options, array $selectedOptions = array())
...
        foreach ($options as $key => $optionSpec) {
            $value    = '';
...
            if (isset($optionSpec['value'])) {
                $value = $optionSpec['value'];
            }
...
            if (ArrayUtils::inArray($value, $selectedOptions)) {
                $selected = true;
            }
...

C'est sur la fonction ArrayUtils::inArray que l'erreur est !

La valeur booléenne de '__isInitialized__' valide chacunes des options....
En abrégé : ArrayUtils::inArray('trucMachin',true) = true !
Sauf, si l'on met 'true' dans le troisième paramètre ('$strict') de la fonction inArray. La, tous fonctionne bien.

Je ne sais toujours pas pourquoi certaines valeurs font références à un objet du proxy....
Et je ne sais pas si FormSelect et Element\Select sont effectivement bien adapté à ce type de traitement. Je serais plus partisan de créer une nouvelle aide de vue spécifique aux 'Select' provenant de jointure...

Est-ce un bugg, ou une mauvaise utilisation....

Hors ligne

 

#7 09-07-2014 15:49:03

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

Re: [Doctrine 2] Problème de cache et select

Salut, c'est un peu bizarre ton problème. Il existe un composant DoctrineSelect pour justement remplir un select à partir d'un modèle doctrine smile. Ce select peut utiliser un repository pour se remplir et donc récupérer que ce dont tu as besoin wink.

Hors ligne

 

#8 09-07-2014 16:01:09

pconrad
Membre
Date d'inscription: 29-04-2014
Messages: 20

Re: [Doctrine 2] Problème de cache et select

Orkin a écrit:

Salut, c'est un peu bizarre ton problème. Il existe un composant DoctrineSelect pour justement remplir un select à partir d'un modèle doctrine smile. Ce select peut utiliser un repository pour se remplir et donc récupérer que ce dont tu as besoin wink.

Oui, j'ai vu ça en jetant un œil dans les sources et dans le forum.
Le problème apparaît lors du 'bind' fait sur le formulaire. Je n'ai pas exploré entièrement les sources de 'ObjectSelect' de DoctrineORMModule pour voir si le problème est identique.

Merci.

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