2017-01-25 4 views
0

В моем проекте Падель на Symfony2 у меня конкурс - Регистрация отношенийDoctrine Query на многие к одному отношения

О «конкуренции» лица:

/** 
* @ORM\OneToMany(targetEntity="Registration", mappedBy="competition") 
*/ 
protected $registrations; 

На «Регистрация» лица:

/** 
* @ORM\ManyToOne(targetEntity="PadelSchedule\UserBundle\Entity\User", inversedBy="registrations") 
* @ORM\JoinColumn(name="idPlayer", referencedColumnName="id") 
*/ 
private $player; 

/** 
* @ORM\ManyToOne(targetEntity="Competition", inversedBy="registrations") 
* @ORM\JoinColumn(name="idCompetition", referencedColumnName="id") 
*/ 
private $competition; 

Нечто подобное. Мне нужно сделать, имея идентификатор игрока, получить список соревнований, на которых зарегистрирован этот игрок.

Тесного вещь, что я получаешь использовать соединение с этим запросом:

$qb = $em->createQueryBuilder() 
      ->select('r, c') 
      ->from('PadelScheduleMainBundle:Registration', 'r') 
      ->leftJoin('r.competition', 'c') 
      ->where('r.player = :idPlayer') 
      ->setParameter('idPlayer', $idPlayer); 

Но, как это кажется ошибкой я получаю, что я думаю, что я получаю через этот список регистраций с конкурс присоединился, но мне нужно, чтобы мой взгляд был списком объектов «Конкурс».

Любая помощь? Благодаря!

ответ

2

Поскольку вы выбираете из своего регистрационного объекта, вы получаете результат регистрации. Может быть, вам лучше удачи, используя запрос, как это:

$em->createQueryBuilder() 
    ->select('c') 
    ->from('PadelScheduleMainBundle:Competition', 'c') 
    ->innerJoin('c.registrations', 'r') 
    ->where('r.player = :player') 
    ->setParameter('player', $playerId) 
+0

Спасибо! это сработало отлично! – Aday88

1

По вашему вопросу запроса .. У меня написать этот запрос ..Please Попробуйте с этим запросом:

$query = $em->createQuery(
    'SELECT c 
    FROM PadelScheduleMainBundle:Competition c 
    INNER JOIN c.registrations r 
    WHERE r.player = :idPlayer') 
->setParameter('idPlayer', $idPlayer);