有两个实体类,我想在一个查询中从MySQL表中获取它们的对象:
SELECT d, e
FROM OrganizerBundle:DailyTask d, OrganizerBundle:Event e
WHERE d.weekday = 'all' OR DATE_FORMAT(e.date,'%Y-%m-%d') = :date
如您所见,我需要工作日 = 'all' 的每日任务和日期 = :d ate 的事件。问题是 - WHERE 仅适用于第一个表(工作日 = 'all'(+ 我从第二个表中获取所有对象。如何分隔两个实体的 WHERE 子句?
如上所述,在教义2中,你想要的是不可能的。
您声明要从此数据生成一个表。我建议使用本机SQL,并使用MySQL的强大INSERT INTO ... SELECT ...
。
我不知道你的表结构是什么,你的新表和旧表,所以我只是猜测UNION
可以帮助您将其放在单个查询中,否则只需使用两个不同的插入。
请注意,当两个表具有相似的结构时,UNION
大多是整洁的。我从您的实体名称中猜测,事件和每日任务都有日期和其他一些公共字段。
你会得到这样的东西:
$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();