Buenas,
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:
$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));
lo que me devuelve el siguiente SQL
Código SQL:
Ver originalSELECT 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