Problème avec la QueryBuilder sur table avec UniqueConstraint sur 2 clés
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) :
Code:
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')
; |
mais je veux aussi joindre sur l'entité Evaluation :
Code:
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é User :
Code:
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é ActivityParameters
Code:
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;
}
} |
Voilà l'entité Activity
Code:
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;
}
} |
Je ne vois pas comment modifier cette querybuilder pour récupérer les données de Evaluation. Je souhaiterais quelque chose comme ça :
Code:
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
; |
Merci d'avance pour les idées, suggestion