0
我想用OneToMany关系查询一个实体,但它不起作用,因为子查询DQL没有很好地转换。加入OneToMany的关系
我希望这个代码:
$subquery = $manager->createQueryBuilder();
$subquery
->select('s.occupant')
->from('MyBundle:Stay', 's')
->where('s.dateDeparture IS NULL')
;
$qb
->where($qb->expr()->notIn('o.id', ':subQuery'))
->setParameter('subQuery', $subquery->getDQL())
;
产生:
WHERE o0_.id NOT IN (
SELECT s.occupant_id FROM Stay s WHERE s.date_departure IS NULL
)
但是,相反,我有这样的:
WHERE o0_.id NOT IN (
'SELECT s.occupant FROM MyBundle:Stay s WHERE s.dateDeparture IS NULL'
)
这里有问题:
- 子查询被封装在逗号
之间- SQL字段没有从实体(居住者,dateDeparture)中的名称转换为其等同的MySQL(occupant_id,date_departure)
- 使用实体名称(MyBundle:Stay),并且不会将其转换为与SQL等效的逗留)
我的其他查询完美工作,以及封装这个主查询。
我也尝试使用OneToMany关系来执行此操作,因为存在Occupant.stays关系,但我无法使其工作。
这里是我的乘员类:
class Occupant
{
...
/**
* @ORM\OneToMany(targetEntity="EmmausBundle\Entity\Stay", mappedBy="occupant", cascade={"persist"})
* @ORM\OrderBy({"dateArrival" = "DESC"})
*/
private $stays;
...
}
而且我留类:
class Stay
{
...
/**
* @ORM\ManyToOne(targetEntity="Occupant", inversedBy="stays")
* @ORM\JoinColumn(name="occupant_id", referencedColumnName="id")
*/
private $occupant;
/**
* @var \DateTime
*
* @ORM\Column(name="date_departure", type="datetime", nullable=true)
*/
private $dateDeparture;
...
}
感谢您的帮助!
请,你的实体类添加到这个问题。如果您的实体字段名称与数据库中的属性名称不同,那么您必须在实体类中使用注释来将文件“连接”到正确的属性。 – PeMaCN
我已经更新了与实体的问题 – Cryborg