使用 DQL 合并两个查询



我的主要实体poi与我的另外两个实体peopleplaces有两个OneToOne关系。

应用/实体/人员.php

class People
{
/**
 * @ORMId()
 * @ORMGeneratedValue()
 * @ORMColumn(type="integer")
 */
private $id;
/**
 * @ORMOneToOne(targetEntity="AppEntityPoi", cascade={"persist", "remove"})
 * @ORMJoinColumn(nullable=false)
 */
private $poi;

应用/实体/地点.php

class Places
{
/**
 * @ORMId()
 * @ORMGeneratedValue()
 * @ORMColumn(type="integer")
 */
private $id;
/**
 * @ORMOneToOne(targetEntity="AppEntityPoi", cascade={"persist", "remove"})
 */
private $poi;

现在我需要将peopleplaces放在同一个数组或其他东西中。我通过合并两个查询得到了它:

$query = $entityManager->createQuery('select p from App:People p'); //same for places then merge in array...

问:有没有办法用一个 DQL 查询获得相同的结果?(特别是如果实体没有相同的列(。

要简单地将所有PeoplePlaces都放在一个数组中,您可以使用:

$query = $entityManager->createQuery('select people, places from App:People people, App:Places places');

我想你会想为给定的Poi获取它们,在这种情况下,如果你只有poi id,你可以试试这个:

$query = $entityManager
    ->createQuery('select people, places from App:People people, App:Places places where people.poi = :poi and places.poi = :poi')
    ->setParameter('poi', $poiId)
;

当然,如果您有一个Poi实体对象可供您使用,您可以简单地执行

$peopleAndPlaces = [$poi->getPeople(), $poi->getPlaces()]

请注意,为了使上述代码正常工作,您必须将这些方法添加到相应的实体类中,并确保与Poi的关系是双向的

如果出于某种原因经常需要获取该数组,并且您有一个Poi实体对象,则最好向Poi类添加一个方法

class Poi
{
    ...
    public function getPeopleAndPlaces()
    {
        return [$this->getPeople(), $this->getPlaces()];
    }

然后在需要时致电$poi->getPeopleAndPlaces()

相关内容

  • 没有找到相关文章

最新更新