您有一些实体相关,需要定义一个dql查询来获取实体。
MAIN ENTITY
class proyectosSubsecciones
{
...
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="app\SubseccionesBundle\Entity\Subsecciones")
* @ORM\JoinColumn(name="id_subseccion", referencedColumnName="id")
*/
private $subseccion;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="app\ProyectosBundle\Entity\Proyectos")
* @ORM\JoinColumn(name="id_proyecto", referencedColumnName="id")
*/
private $proyecto;
....
相关实体
class subsecciones
{
...
/**
* @ORM\ManyToOne(targetEntity="app\SeccionesBundle\Entity\Secciones")
* @ORM\JoinColumn(name="id_seccion", referencedColumnName="id",nullable=false)
*/
private $seccion;
...
我需要从每个“app \ ProyectosBundle \ Entity \ Proyectos”中获取“app \ SeccionesBundle \ Entity \ Secciones”类型的不同实体
我正在尝试查询:
$consulta=$em->createQuery('
SELECT DISTINCT sc
FROM ProyectosSubseccionesBundle:ProyectosSubsecciones p
JOIN p.subseccion s WITH s.id=p.subseccion
JOIN s.seccion sc WITH sc.id=s.seccion
WHERE p.proyecto= :id
');
$consulta->setParameter('id', $id_proyecto);
$subsecciones=$consulta->getResult();
我收到错误消息:
“如果不选择至少一个根实体别名”
,则无法通过标识变量选择实体但我只需要来自sc.Any idea的数据??
答案 0 :(得分:1)
在ProyectosSubseccionesRepository
中使用查询构建器:
return $this->createQueryBuilder('p')
->join('p.subseccion', 's', Join::WITH, 's = p.subseccion')
->join('s.seccion', 'sc', Join::WITH, 'sc = s.seccion')
->where('p.proyecto = :id')
->setParameter('id', $id)
->getQuery()
->execute()
答案 1 :(得分:0)
对于您的问题,我假设您已在实体之间定义了bidirectional
关系。
喜欢
Entity RelationType ReferenceEntity Reference
==========================================================================================
ProyectosSubsecciones ManyToOne Subsecciones $subseccion
ProyectosSubsecciones ManyToOne Proyectos $proyecto
Proyectos OneToMany ProyectosSubsecciones $proyectosSubsecciones
Subsecciones OneToMany ProyectosSubsecciones $proyectosSubsecciones
Subsecciones ManyToOne Secciones $seccion
Secciones OneToMany Subsecciones $subsecciones
考虑上述bidirectional
定义,您可以将DQL编写为
SELECT DISTINCT s
FROM Secciones s
JOIN s.subsecciones ss
JOIN ss.proyectosSubsecciones pss
JOIN pss.proyecto
WHERE p.id = :id
上述查询将选择Secciones
实体,并使用Subsecciones
实体中定义的属性$subsecciones
加入Secciones
实体。
然后,查询将使用Subsecciones
实体中定义的属性ProyectosSubsecciones
与$proyectosSubsecciones
加入Subsecciones
。
最后,ProyectosSubsecciones
Proyectos
实体使用$proyecto
实体中定义的ProyectosSubsecciones
属性,最后它会根据您的WHERE
子句应用过滤器。< / p>
请注意,不需要使用
等条件时添加其他过滤器WITH
子句来加入您的实体,因为在DQL中,加入部分将由您定义为OneToMany/ManyToOne or ManyToMany
WITH
的属性覆盖if实体之间没有定义关系映射,或者如果要在加入ON(a.id = b.some_id AND/WITH some = some)