Bonjour à tous,

Je veux bien un coup de main pour comprendre ce comportement

Soit une entité A qui possède, dans ses attributs une entité B.
B possède dans ses attributs une collection d’entités C

Note: J'ai simplifié le code pour aller à l'essentiel de la situation

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
 
class A
{
 
…………………….
 
    /**
     * @var \B
     *
     * @ORM\GeneratedValue(strategy="NONE")
     * @ORM\ManyToOne(targetEntity="Company")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_b", referencedColumnName="id_b" , onDelete="CASCADE")
     * })
     */
    private $b;
 
    /**
     * Get idB
     *
     * @return \......\Entity\B 
     */
    public function getB()
    {
        return $this->b;
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
 
class B
{
……………………………………….
    /**
     * @ORM\OneToMany(targetEntity="HourTypePriority", mappedBy="idCp")
     */
    private $c;
 
    /**
     * Get C
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getC()
    {
        return $this->c;
    }
 
}
Probleme :

Voici ce qu’il se passe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
em         = $this->container->get('doctrine')->getManager();
$rep      = $em->getRepository('A');
$a          = $rep->find($id);
 
echo "NB C: " . $a->getB()->getC()->count() . "<br>";
Retourne 0

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$repB    = $em->getRepository('B');
$b          = $repB->find(38);  //Même id que dans le $a->getB() ci-dessus bien évidement
echo "Nb C: " . $b->getC()->count() . "<br />";
Retourne le bon nombre

Il semble que le lazy load ne fonctionne que pour le premier niveau.
Avez-vous une idée ??

Merci d'avance pour le coup de main