У меня небольшая проблема с доктриной, использующей Symfony 1.4 (я думаю, что она использует доктрину 1.2). У меня есть 2 запроса, используя raw sql в консоли mysql, они выдают одинаковый набор результатов. Запросы могут быть сгенерированы с использованием этого кода:
$dates = Doctrine::getTable('Picture')
->createQuery('a')
->select('substr(a.created_at,1,10) as date')
->leftjoin('a.PictureTag pt ON a.id = pt.picture_id')
->leftjoin('pt.Tag t ON t.id = pt.tag_id')
->where('a.created_at <= ?', date('Y-m-d 23:59:59'))
->orderBy('date DESC')
->groupby('date')
->limit(ITEMS_PER_PAGE)
->offset(ITEMS_PER_PAGE * $this->page)
->execute();
Если я удаляю два соединения, это меняет запрос, но набор результатов тот же.
Но используя doctrine execute (), вы получите только одну строку.
Кто-нибудь имеет представление о том, что здесь происходит?
PS: таблица изображений содержит идентификатор, заголовок, файл, create_at (формат 'Ymd h: i: s'), таблица тегов - это идентификатор, имя, а PictureTag - таблица отношений с идентификатором и двумя внешними ключами. *
PS 2: Вот два SQL-запроса (первый без объединений)
SELECT substr(l.created_at, 1, 10) AS l__0 FROM lupa_picture l WHERE (l.created_at <= '2010-03-19 23:59:59') GROUP BY l__0 ORDER BY l__0 DESC LIMIT 4
SELECT substr(l.created_at, 1, 10) AS l__0 FROM lupa_picture l LEFT JOIN lupa_picture_tag l2 ON (l.id = l2.picture_id) LEFT JOIN lupa_tag l3 ON (l3.id = l2.tag_id) WHERE (l.created_at <= '2010-03-19 23:59:59') GROUP BY l__0 ORDER BY l__0 DESC LIMIT 4