2012-05-26 17 views
10

Me gustaría escribir una consulta anidada con Doctrine; SQL muestra es, como a continuación:¿Cómo convertir esto a formato Doctrine 2 QueryBuilder?

SELECT * FROM layer WHERE layer.id NOT IN 
       (SELECT task_id FROM users_tasks WHERE user_id = 1) 
AND parent_id IS NOT NULL AND leaf IS TRUE 

tengo problema convirtiendo el SEGUNDOSELECT comunicado.

Gracias de antemano.

Me gustaría hacerlo con createQueryBuilder no createQuery.

Respuesta

29

probar esto:

1) crear su subconsulta

$subquery = $this->_em->createQueryBuilder() 
     ->select('t.id') 
     ->from('yourBundle:Task', 't') 
       ->innerjoin('t.user','u') 
       ->where('u.id = 1') 
     ->getDQL(); 

2) después de crear la consulta

$query = $this->_em->createQueryBuilder() 
       ->select('l') 
       ->from('yourBundle:Layer', 'l') 
      ->where($query->expr()->notIn('l.id', $subquery)) 
       ....; 

lo probé y funciona :)

+0

Me gustaría el que tiene 'createQueryBuilder'; – PMoubed

+0

Modifico la consulta (detalles arriba) –

+0

Funciona. Gracias. – PMoubed

1

A. La respuesta de aitboudad funcionó para mí, pero necesitaba construir la subconsulta usando DQL directamente para evitar el campo que faltaba e rrores. No es perfecto, pero parece ser una solución confiable.