学说:如何获得两个实体'来自两个具有不同子句的表中的对象?

时间:2017-07-08 19:40:35

标签: php symfony doctrine-orm

有两个实体类,我想在一个查询中从MySQL表中获取它们的对象:

SELECT d, e 
        FROM OrganizerBundle:DailyTask d, OrganizerBundle:Event e
        WHERE d.weekday = 'all' OR DATE_FORMAT(e.date,'%Y-%m-%d') = :date

如您所见,我需要在工作日使用DailyTasks ='所有'和date =:date的事件。问题是 - WHERE仅适用于第一个表(工作日='所有')+我从第二个表中获取所有对象。如何为两个实体分隔WHERE子句?

1 个答案:

答案 0 :(得分:0)

如上所述,在Doctrine 2中你想要的东西是不可能的。

您声明要从此数据构建一个表。我建议使用原生SQL,并使用MySQL强大的INSERT INTO ... SELECT ...

我不知道您的表结构是什么,包括新表和旧表,所以我只是猜测UNION可以帮助您将它放在一个查询中,但是否则只是使用两个不同的插入。

请注意,当两个表具有相似的结构时,UNION大多是整洁的。我猜你的实体名称,Events和DailyTasks都有一个日期和一些其他常见字段。

你会得到这样的东西:

$em = $this->getDoctrine()->getManager(); $sql = "INSERT INTO newtable (date, description) SELECT date, description FROM (SELECT date, description FROM dailytask WHERE weekday = 'all') UNION (SELECT date, description FROM event WHERE DATE_FORMAT(e.date,'%Y-%m-%d') = ?)"; $stmt = $em->getConnection()->prepare($sql); $stmt->execute();