query - generate entities symfony 4
consulta ''where not in in'' con doctrine query builder (2)
Im tratando de reproducir esta consulta:
SELECT * FROM `request_lines`
where request_id not in(
select requestLine_id from `asset_request_lines` where asset_id = 1
)
en doctrine query builder, estoy atascado en donde request_id no está en (seleccionar
Actualmente tengo:
$linked = $em->createQueryBuilder()
->select(''rl'')
->from(''MineMyBundle:MineRequestLine'', ''rl'')
->where()
->getQuery()
->getResult();
Debe usar expresiones de generador de consultas, y esto significa que necesita acceder al objeto generador de consultas. Además, el código es más fácil de escribir si genera la lista de subselección antes de tiempo:
$qb = $em->createQueryBuilder();
$nots = $qb->select(''arl'')
->from(''$MineMyBundle:MineAssetRequestLine'', ''arl'')
->where($qb->expr()->eq(''arl.asset_id'',1))
->getQuery()
->getResult();
$linked = $qb->select(''rl'')
->from(''MineMyBundle:MineRequestLine'', ''rl'')
->where($qb->expr()->notIn(''rl.request_id'', $nots))
->getQuery()
->getResult();
Es posible hacer esto en una consulta de Doctrine:
$qb = $this->_em->createQueryBuilder();
$sub = $qb;
$sub = $qb->select(''arl'')
->from(''$MineMyBundle:MineAssetRequestLine'', ''arl'')
->where($qb->expr()->eq(''arl.asset_id'',1));
$linked = $qb->select(''rl'')
->from(''MineMyBundle:MineRequestLine'', ''rl'')
->where($qb->expr()->notIn(''rl.request_id'', $sub->getDQL()))
->getQuery()
->getResult();
Verifique la referencia en esta respuesta aquí