Doctrine 2 запрашивает недостающую часть внутреннего соединения - PullRequest
3 голосов
/ 14 марта 2011

Я использую Doctrine 2, чтобы попытаться выполнить запрос с внутренним объединением.У меня есть сущность сайта и сущность страницы.Каждый сайт может иметь много страниц, и каждая страница может принадлежать только одному сайту.У меня есть внешний ключ site_id в строках таблицы моих страниц.В моем объекте Site я создал ассоциацию OneToMany, в которой целевой объект является объектом моей страницы, а mappedBy установлен на Site.

/**
 * @var \Doctrine\Common\Collections\ArrayCollection
 * @OneToMany(targetEntity="Page", mappedBy="Site", cascade={"persist", "remove"})
 */
private $pages;

В моей сущности Page у меня есть ассоциация ManyToOne, где целевая сущность установлена ​​в Site.

/**
 * @var App\Entity\Site
 * @ManyToOne(targetEntity="Site")
 */
private $site;

Вот мой оператор построителя запросов, в котором я передаю определенный идентификатор сайта:

$qb = $this->_em->createQueryBuilder();
$qb->select('s')
    ->from('App\Entity\Site', 's')
    ->innerJoin('s.pages', 'p')
    ->where('s.id = :id')
    ->setParameter('id', $id);

, а здесь - фактический SQL, который я получаю:

SELECT s0_.id AS id0, s0_.domain AS domain1 FROM sites s0_ INNER JOIN  WHERE s0_.id = ?

Видите, как информация INNER JOIN полностью отсутствует?Я что-то здесь не так делаю или это проблема Doctrine 2?

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Вам нужно явно указать Doctrine для получения этих столбцов:

$qb->select('s', 'p')
   ->form(...)
   ->join(...) 
0 голосов
/ 14 марта 2011

Разобрался.Мое утверждение mappedBy было неверным в сущности сайта.Я указывал на «Сайт», когда это должен был быть «Сайт».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...