estoy tratando de hacer una consulta DQL, con doctrine obvio.
Tengo dos modelos relacionados en muchos-a-muchos de la siguiente forma:
Código:
Category: columns: id: .... parent_id: ... ..... indexes: category_parent: fields: [parent_id] relations: Items: class: Item refClass:CategoryItem local: category_id foreign: item_id Item: columns: id: ... ... relations: Categories: class: Category refClass: CategoryItem local: item_id foreign: category_id CategoryItem: columns: category_id: type: integer(4) primary: true item_id: type: integer(8) primary: true
Y lo que quiero es traer todos los items que pertenezcan a la categoria id=2 o categorias con el parent_id=2 (es decir items dentro de la categoria 2 o categorias hijas de la 2)
El DQL que estoy tratando de utilizar es asi:
Código:
lo que me devuelve el siguiente SQL$q = Doctrine_Query::create() ->from('Item i') ->select('i.*, c.name') ->leftJoin('i.Categories c') ->andWhere( 'i.is_active = ?', 1) ->andWhere('(c.id = ? OR c.parent_id = ?)', array(2, 2));
Código SQL:
Ver original
SELECT p.id AS p__id, ..., p2.id AS p2__id, p2.name AS p2__name FROM item p LEFT JOIN category_item p3 ON (p.id = p3.item_id) LEFT JOIN category p2 ON p2.id = p3.category_id WHERE (p.is_active = '1' AND (p2.id = '2' OR p2.parent_id = '2'))
Lo que estaía bien!, eh ahora la cuestion! cuando le intento agregar un LIMIT
->limit(10)
Me realiza dos consultas, lo que no me gusta nada:
Código SQL:
Ver original
#1 SELECT DISTINCT p4.id FROM item p4 LEFT JOIN category_item p6 ON (p4.id = p6.item_id) LEFT JOIN category p5 ON p5.id = p6.category_id WHERE p4.is_active = '1' AND (p5.id = '2' OR p5.parent_id = '2') LIMIT 10 #2 SELECT p.id AS p__id,...., p2.id AS p2__id, p2.name AS p2__name FROM item p LEFT JOIN category_item p3 ON (p.id = p3.item_id) LEFT JOIN category p2 ON p2.id = p3.category_id WHERE p.id IN ('5843', '5853') AND (p.is_active = '1' AND (p2.id = '2' OR p2.parent_id = '2'))
Porque? y porque cuando le agrego el limit?
algún guru?
Gracias