Bonsoir,
je tente de faire un querybuilder qui contient un innerjoin, mais je n'arrive pas à aller jusqu'au bout !
une table animals,
Code php : 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 class Animals { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) * @Assert\NotBlank(message="vous devez rentrer un nom commun") */ private $commonName; /** * @ORM\ManyToMany(targetEntity=Continents::class, inversedBy="animals") * @Assert\Count(min="1", minMessage="vous devez rentrer au moins 1 continent") * @ORM\JoinColumn(nullable=false) * */ private $continents; public function __construct() { $this->population = new ArrayCollection(); $this->continents = new ArrayCollection(); } /** * @return Collection|Continents[] */ public function getContinents(): Collection { return $this->continents; } public function addContinent(Continents $continent): self { if (!$this->continents->contains($continent)) { $this->continents[] = $continent; } return $this; } public function removeContinent(Continents $continent): self { $this->continents->removeElement($continent); return $this; } }
une table continents,
Code php : 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 class Continents { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255, nullable=true) * */ private $continentsName; /** * @ORM\ManyToMany(targetEntity=Animals::class, mappedBy="continents") */ private $animals; public function __construct() { $this->animals = new ArrayCollection(); } public function getId(): ?int { return $this->id; } public function getContinentsName(): ?string { return $this->continentsName; } public function setContinentsName(?string $continentsName): self { $this->continentsName = $continentsName; return $this; } /** * @return Collection|Animals[] */ public function getAnimals(): Collection { return $this->animals; } public function addAnimals(Animals $animals): self { if (!$this->animals->contains($animals)) { $this->animals[] = $animals; $animals->addContinent($this); } return $this; } public function removeAnimal(Animals $animal): self { if ($this->animals->removeElement($animal)) { $animal->removeContinent($this); } return $this; } }
une relation many to many et la requête:
Code php : 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 class AnimalsRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Animals::class); } public function findAnimals($species, $diets): array { $qb = $this->createQueryBuilder('a') ->innerJoin('a.continents', 'c', 'WITH', ?? les id de la table animals = les id animals de la table d'association animals_continents) ->Where("c.id=1"); $query = $qb->getQuery(); return $query->execute(); } }
Après , symfony me crée une table animals_continents dans ma BDD, mais je n'ai pas d'entité animals_continents ( pas crée automatiquement ).
Est-ce que c'est ça le problème ? ou c'est moi qui ne comprend pas la doc ( il y des chances ! )
Merci pour vos réponses, c'est du classique, mais j'avoue ne pas comprendre la doc de Doctrine
Laurent.
Partager