Doctrine 2 INNER JOIN with Subquery

时间:2016-11-11 13:16:12

标签: php mysql database doctrine-orm

我正在使用 QueryBuilder 将查询迁移到 doctrine 。我使用子查询查询内部联接,我想知道如何使用 doctrine 执行此操作。

        SELECT p.*
        FROM produtos p
        INNER JOIN
        (
            SELECT e.*, d.id_deposito, d.quantidade, d.qtde_temp, d.valor_produto, d.valor, d.valor_representante_produto, d.valor_representante, d.id_erp
            FROM produtos_estoque e
            INNER JOIN depositos_produtos_estoque d ON e.id_estoque = d.id_estoque
            WHERE e.inativo = '0' AND e.excluido = '0' AND d.excluido = '0' AND d.id_deposito = '1' AND d.inativo = 0 AND d.valor != '0.00'
        ) e ON p.id_produto = e.id_produto

转移到 doctrine 我想到了以下解决方案,但是它没有按照以下方式工作,我已经研究过但是我没有找到适用于 doctrine 2 的解决方案

        $qb_estoque = $this->entityManager->createQueryBuilder();
        $qb_estoque->select("e, d1.id_deposito, d.quantidade, d.qtde_temp, d.valor_produto, d.valor, d.valor_representante_produto, d.valor_representante, d.id_erp")
            ->from(\model\entity\Produtos_estoque::get_class_name(), "e")
            ->innerJoin(\model\entity\Depositos_produtos_estoque::get_class_name(), "d", Join::WITH, "e.id_estoque = d.produtos_estoque")
            ->innerJoin("d.depositos", "d1")
            ->where($qb_estoque->expr()->andX(
                $qb_estoque->expr()->eq("e.inativo", 0),
                $qb_estoque->expr()->eq("e.excluido", 0),
                $qb_estoque->expr()->eq("d.inativo", 0),
                $qb_estoque->expr()->eq("d.excluido", 0),
                $qb_estoque->expr()->eq("d1.id_deposito", 1),
                $qb_estoque->expr()->neq("d.valor", 0)
            ));

        $qb = $this->entityManager->createQueryBuilder();
        $qb->select("p")
            ->from(\model\entity\Produtos::get_class_name(), "p")
            ->innerJoin(sprintf("(%s)", $qb_estoque->getQuery()->getSQL()).")", 'e', Join::WITH, 'p.id_produto = e.produtos');

注意:是的,应该使用子查询来完成,因为查询的其余部分需要使用子查询中包含的信息。

0 个答案:

没有答案