2
I’m migrating my appointments to Doctrine using the Querybuilder. And I have a consultation with Inner Join with a subquery, would like to know how to do this using 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
Transferring to Doctrine I thought about the following solution, but it does not work as follows, I have researched but I have not found a solution that works in the 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');
Note: Yes, it should be done using subquery, as the rest of the query needs to use information that is contained in subquery.
You can expose the entity code used in the query?
– Vinícius Fagundes
If you can also do a small scheme of how your tables are related. And what version of php you are using?
– Vinícius Fagundes