У меня есть SQL-запрос, который возвращает все строки в одной таблице (стране), у которых есть связанная запись в другой таблице (утки), но я изо всех сил пытаюсь превратить это в DQL. Это стандартное отношение «один-много», так как в каждой стране может быть несколько уток, я считаю, что все настроено правильно, так как я могу вернуть уток в пределах страны и вернуть страну, в которой утка использует стандартный код.
Рабочий запрос:
SELECT c.* FROM country c
INNER JOIN ducks d
ON c.id = d.country_id
GROUP BY c.country
ORDER BY c.country ASC
Я пытался преобразовать это в:
SELECT c FROM WfukDuckBundle:Country c
INNER JOIN WfukDuckBundle:Ducks d
ON c.id = d.country_id
GROUP BY c.country
ORDER BY c.country ASC
, которая выдает следующую ошибку:
[Semantical Error] line 0, col 79 near 'd ON': Error: Identification Variable
WfukDuckBundle:Ducks used in join path expression but was not defined before.
Я довольно новичок в Symfony / Doctrine, поэтому я подозреваю, что это, вероятно, что-то очевидное!
Я использую Symfony 2.0.11 с доктриной
Обновление:
Я также пробовал:
SELECT c FROM WfukDuckBundle:Country c
INNER JOIN c.ducks d
ON c.id = d.country_id
GROUP BY c.country
ORDER BY c.country ASC
где «утки» определены в классе Country как:
/**
* @ORM\OneToMany(targetEntity="Ducks", mappedBy="country")
*/
protected $ducks;
public function __construct()
{
$this->ducks = new ArrayCollection();
}
определение страны в классе уток:
/**
* @ORM\ManyToOne(targetEntity="Country", inversedBy="ducks")
* @ORM\JoinColumn(name="country_id", referencedColumnName="id")
*/
private $country;