mysql - 如何使用 DBAL 查询构建器来构建这个子查询?

标签 mysql doctrine-orm dbal

我有这个带有子查询的查询。

SELECT * FROM 
(SELECT module_id FROM an_modules AS m LIMIT 20 OFFSET 0) AS m 
LEFT JOIN an_module_sites AS ms ON (m.module_id = ms.module_id)

如何使用DBAL像这样构建子查询?
这似乎行不通。

$qb->select('*')
    ->from(
        $qb->select('module_id')
            ->from($this->Db->getTableName('modules'), 'm')
        , 'm')
    ->leftJoin('m', $this->Db->getTableName('module_sites'), 'ms', 'm.module_id = ms.module_id');
$stmt = $qb->execute();
$result = $stmt->fetchAll();

最佳答案

我最近需要这样做来实现分页/排序助手。作为其中的一部分,我将采用由我的模型执行的查询生成器,并通常计算它在不受限制的情况下将生成的总行数。

要跨平台,我不能使用 rowCount 并且潜在的分组意味着我不能只更改选择中的字段 - 所以最好的选择是删除限制并将其计为子查询。这是我想出的:

<?php
$totalResults = $qb->getConnection()->createQueryBuilder()
    ->select('COUNT(*)')
    ->from(
        '('
        .$qb
            ->setFirstResult(null)
            ->setMaxResults(null)
            ->resetQueryPart('orderBy')
            ->getSQL()
        .')',
        'tmp')
    ->execute()
    ->fetch(\PDO::FETCH_COLUMN);

我不确定 doctrine ORM 是如何处理这个问题的,但至少在纯 DBAL 中这似乎是可行的。

关于mysql - 如何使用 DBAL 查询构建器来构建这个子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869759/

相关文章:

php - Symfony2 持久化嵌入形式

mysql - 在我的 Web 应用程序中获取主键列显示为 null 的结果,但在 SQL Workbench 中相同的 SELECT 语句工作正常

mysql - Symfony2 学说通过 SSL 连接到数据库

mysql - 只为每个值减去前两行

mysql - 导入错误:没有名为 connector.conversion 的模块

symfony - Symfony 2 中的 2 级实体文件夹

php - 数据库抽象层——那是什么?

php - 进度条和导入数组mysql

sql - 将计算列/虚拟列添加到现有查询

php - codeception : Setting the "doctrine" pre-defined service is deprecated since Symfony 3. 3 并且 Symfony 4.0 将不再支持