与学说联盟

时间:2016-08-10 12:10:12

标签: symfony doctrine union

我需要使用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对象(不是查询或其他东西)

谢谢

2 个答案:

答案 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 [];
    }

这将为您提供一个包含您请求的行的数组,或者在出现错误的情况下为一个空数组。