我需要使用union创建一个QueryBuilder,这可能吗?
$qb = $this->em->createQueryBuilder()
->select('table1.numObject AS id')
->select ('table1.name AS name')
->from("MyBundle:Table1", "table1")
和 联合
->select('table2.id AS id')
->select ('table2.name AS name')
->from("MyBundle:Table2", "table2")
注意:它必须是queryBuilder对象(不是查询或其他东西)
谢谢
答案 0 :(得分:6)
不幸的是UNION
中无法Doctrine
。你必须从数据库中获取两个集合并执行" union"在php端手动或使用本机sql。
检查this issue以获取更多信息
答案 1 :(得分:-1)
通过Doctrine
语法是不可能的,但是可以使用普通SQL和一条语句来实现:
$conn = $this->getEntityManager()->getConnection();
$sql = <<<SQL
SELECT numObject AS id, name FROM table1
UNION // or UNION ALL if you want duplicates
SELECT id, name FROM table2
SQL;
try {
$stmt = $conn->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
} catch (DBALException $e) {
return [];
}
这将为您提供一个包含您请求的行的数组,或者在出现错误的情况下为一个空数组。