Bonjour,
J'ai un formulaire de recherche basé sur des critères complétés par l'utilisateur. Dans ces critères, il y en a qui correspondent à des équipements qui peuvent être de deux sortes : ceux liés à la cellule et ceux liés au porteur.
Lors du chargement du formulaire, voici l'erreur que j'obtiens :
Pour effectuer la recherche, j'ai créé une entité "AdvertSearch.php" qui est hydratée par le formulaire de recherche.Entity of type "App\Entity\Equipment" passed to the choice field must be managed. Maybe you forget to persist it in the entity manager?
Voici le code correspondant aux champs liés à l'équipement dans mon formulaire :
Dans mon entité 'AdvertSearch.php", voici les propriétés , setters et getters liés :
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 ... $builder ... ->add('cellEquipments', EntityType::class, ['required' => false, 'label' => false, 'class' => 'App\Entity\Equipment', 'choice_label' => 'equipment', 'multiple' => true, 'query_builder' => function(EquipmentRepository $er) use ($belongingCell) { return $er->queryFindByBelonging($belongingCell); } ] ) ->add('carrierEquipments', EntityType::class, ['required' => false, 'label' => false, 'class' => 'App\Entity\Equipment', 'choice_label' => 'equipment', 'multiple' => true, 'query_builder' => function(EquipmentRepository $er) use ($belongingCarrier) { return $er->queryFindByBelonging($belongingCarrier); } ] ) ...
Voici le code correspondant à la tenue en compte de ces critères dans ma fonction de recherche dans le repository :
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
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 ... /** * @var ArrayCollection */ private $cellEquipments; /** * @var ArrayCollection */ private $carrierEquipments; ... public function __construct() { $this->cellEquipments = new ArrayCollection(); $this->carrierEquipments = new ArrayCollection(); } ... /** * @param ArrayCollection $cellEquipments */ public function setCellEquipments(ArrayCollection $cellEquipments): void { $this->cellEquipments = $cellEquipments; } /** * @return ArrayCollection */ public function getCellEquipments(): ArrayCollection { return $this->cellEquipments; } /** * @param ArrayCollection $carrierEquipments */ public function setCarrierEquipments(ArrayCollection $carrierEquipments): void { $this->carrierEquipments = $carrierEquipments; } /** * @return ArrayCollection */ public function getCarrierEquipments(): ArrayCollection { return $this->carrierEquipments; } ...
Quelqu'un aurait une idée sur la manière de résoudre ce problème?
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
30
31
32
33
34
35
36
37
38
39
40
41
42 ... $cellEquipments = $search->getCellEquipments(); if ($cellEquipments->count() > 0) { $k = 0; foreach ($cellEquipments as $k => $cellEquipment) { $k++; $query = $query->andWhere(":cellEquipment$k MEMBER OF v.cellEquipments") ->setParameter("cellEquipment$k", $cellEquipment) ; } } $carrierEquipments = $search->getCarrierEquipments(); if ($carrierEquipments->count() > 0) { $l = 0; foreach ($carrierEquipments as $l => $carrierEquipment) { $l++; $query = $query->andWhere(":carrierEquipment$l MEMBER OF v.carrierEquipments") ->setParameter("carrierEquipment$l", $carrierEquipment) ; } } ...
Merci d'avance pour votre aide.
Partager