J'essaie de récupérer les donées de plusieurs tables pour faire un json, mais je suis bloqué pour la jointure sur la table ayant une UniqueConstraint sur 2 clés.
Pour l'instant j'en suis là (je récupère biens les éléments) :
mais je veux aussi joindre sur l'entité Evaluation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $qb = $this->_em->createQueryBuilder() ->select('partial s.{id, activity}, partial a.{id, title}, partial p.{id, evaluationType}') ->from('Innova\PathBundle\Entity\Step', 's') ->leftJoin('s.activity', 'a') //jointure sur l'entité Activity ->leftJoin('a.parameters', 'p') // jointure sur l'entité ActivityParameters ->andWhere('s.path = 2') ;
Voilà l'entité User :
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 /** * @ORM\Table( * name="claro_activity_evaluation", * uniqueConstraints={ * @ORM\UniqueConstraint( * name="user_activity_unique_evaluation", * columns={"user_id", "activity_parameters_id"} * ) * } * ) */ class Evaluation { /** * @ORM\ManyToOne(targetEntity="Claroline\CoreBundle\Entity\User") * @ORM\JoinColumn(onDelete="CASCADE", nullable=false) */ protected $user; /** * @ORM\ManyToOne(targetEntity="Claroline\CoreBundle\Entity\Activity\ActivityParameters") * @ORM\JoinColumn(name="activity_parameters_id", onDelete="CASCADE", nullable=false) */ protected $activityParameters; /** * @ORM\Column(name="attempts_count", type="integer", nullable=true) */ protected $attemptsCount; }
Voilà l'entité ActivityParameters
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 /** * @ORM\Table(name="claro_user") * @ORM\Entity(repositoryClass="Claroline\CoreBundle\Repository\UserRepository") */ class User { /** * @var integer * * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string * * @ORM\Column(name="first_name", length=50) * @Assert\NotBlank() */ protected $firstName; }
Voilà l'entité Activity
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 /** * @ORM\Entity * @ORM\Table(name="claro_activity_parameters") */ class ActivityParameters { /** * @var integer * * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var \Claroline\CoreBundle\Entity\Resource\Activity * * @ORM\OneToOne( * targetEntity="Claroline\CoreBundle\Entity\Resource\Activity", * mappedBy="parameters" * ) * @ORM\JoinColumn(name="activity_id", onDelete="CASCADE", nullable=true) */ protected $activity; /** * @var string * * @ORM\Column(name="evaluation_type", nullable=true) */ protected $evaluationType; /** * @return string */ public function getEvaluationType() { return $this->evaluationType; } }
Je ne vois pas comment modifier cette querybuilder pour récupérer les données de Evaluation. Je souhaiterais quelque chose comme ça :
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 /** * @ORM\Table(name="claro_activity") */ class Activity { /** * @var string * @ORM\Column(length=255, nullable=true) */ protected $title; /** * @ORM\OneToOne( * targetEntity="Claroline\CoreBundle\Entity\Activity\ActivityParameters", * inversedBy="activity", * cascade={"persist"} * ) * @ORM\JoinColumn(name="parameters_id", onDelete="cascade", nullable=true) */ protected $parameters; /** * @return string */ public function getTitle() { return $this->title; } }
Merci d'avance pour les idées, suggestion
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $qb = $this->_em->createQueryBuilder() ->select('partial s.{id, activity}, partial a.{id, title}, partial p.{id, evaluationType}, e') ->from('Innova\PathBundle\Entity\Step', 's') ->leftJoin('s.activity', 'a') ->leftJoin('a.parameters', 'p') ->andWhere('s.path = 2') ->leftJoin('je-ne-sais-pas-quoi', 'e') <<==== ->andWhere('e.user = 3') //données pour un utilisateur spécifique ;
Partager