La Doctrine innerjoin sur “un à plusieurs” de la relation avec le querybuilder
J'ai suivantes ER et j'ai besoin d'exécuter la requête suivante dans Symfony2-la Doctrine de l'utilisation de Query Builder (jointure est utilisé seulement lorsque le filtre est demandé)
SELECT *
FROM
`session`
INNER JOIN `goal` ON (`session`.`id` = `goal`.`session_id`)
WHERE
`goal`.`name` = 'Background Dx' AND
`session`.`gsite_id` = '66361836'
Objectif de la déclaration de
/**
....
*
* @ORM\Table(name="goal")
* @ORM\Entity
*/
class Goal
{
...
/**
* @var Session
*
* @ORM\ManyToOne(targetEntity="Session")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="session_id", referencedColumnName="id")
* })
*/
private $session;
...
}
Classe Session ne contient aucune référence à l'objectif
Par la lecture de la documentation en ligne, il semble que la doctrine requiert la présence de la colonne sur l'entité de Session pour effectuer demandé de la rejoindre. Est-il vraiment, ou il ya une autre façon?
Mon QueryBuilder
$rep = $this->em->getRepository(Session::repositoryName);
$qb = $rep->createQueryBuilder("s");
$qb->setMaxResults(50);
//site
if ($params->site != null){
/** @var Gsite **/
$site = $params->site;
$qb->andWhere($qb->expr()->eq("s.site",":site"))->setParameter("site",$site);
}
if (isset($params->goalName)){
///SOMETHING
....
...
...
}
$query = $qb->getQuery();
$paginator = new Paginator($query);
return $paginator;
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de référence à partir de la Session de l'Objectif pour effectuer une jointure. Cependant, la Doctrine ne sais pas pour la carte Objectif des données à l'objet de la Session (si vous ne l'obtenez pas).
Espère que je comprends de votre question correctement.