我的主要实体poi
与我的另外两个实体OneToOne
和people
具有两个places
关系。
App / Entity / People.php
class People
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Poi", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $poi;
App / Entity / Places.php
class Places
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Poi", cascade={"persist", "remove"})
*/
private $poi;
现在,我需要将people
和places
放在相同的数组或类似的数组中。我是通过合并两个查询得到的:
$query = $entityManager->createQuery('select p from App:People p'); //same for places then merge in array...
Q:是否可以通过一个DQL查询获得相同的结果? (特别是如果实体没有相同的列)。
答案 0 :(得分:0)
要简单地将所有People
和Places
放在一个数组中,可以使用:
$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
的关系为bidirectional
如果出于某种原因经常需要获取该数组并且您有一个Poi
实体对象,则最好向Poi
类添加一个方法
class Poi
{
...
public function getPeopleAndPlaces()
{
return [$this->getPeople(), $this->getPlaces()];
}
,然后在需要时致电$poi->getPeopleAndPlaces()
。