有两个实体类,我想在一个查询中从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子句?
答案 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();