代码之家  ›  专栏  ›  技术社区  ›  mlwacosmos

与教义结合

  •  5
  • mlwacosmos  · 技术社区  · 8 年前

    我需要用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对象(不是query或其他对象)

    非常感谢。

    2 回复  |  直到 8 年前
        1
  •  7
  •   Tomasz Madeyski    8 年前

    不幸地 UNION 不可能在 Doctrine 。您必须从数据库中获取两个集合,并在php端手动执行“union”操作或使用原生sql。

    检查 this issue

        2
  •  1
  •   DerpyNerd    5 年前

    不可能通过 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 [];
        }
    

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