2015-08-31 3 views
0

Я хотел бы знать, как я могу установить ограничение на 1 запрос, а затем запрос на основе выбранных результатов.Подзапрос с ограничением в Doctrine/Symfony с использованием DQL

Например, я хочу выбрать последние 100 сообщений и выполнить некоторую операцию.

$first_query= $this->getEntityManager() 
    ->createQuery(
     'SELECT p FROM TestBundle:Post p ORDER BY p.date DESC' 
     ) 
    ->setMaxResults(5); 

Как использовать этот результат для его выбора в следующем запросе?

return $this->getEntityManager() 
    ->createQuery(
     "SELECT u.username , max(p.date),d.points,l.name 
     FROM $first_query 
     JOIN p.location l JOIN p.user u JOIN u.deeds d 
     WHERE l.name = :location 
     GROUP BY u.id 
     ORDER BY d.points DESC , p.date DESC 
     " 

     ) 
    ->setParameter('location' , $location) 
    ->getResult(); 
+0

http://doctrine.readthedocs.org/ru/latest/en/manual/dql-doctrine-query-language.html#comparisons-using-subqueries –

ответ

2

Я узнал, что DQL не поддерживает ограничения, поэтому я пошел на собственный sql.

$stmt = $this->getEntityManager()->getConnection()->prepare($query); 
    $stmt->execute(); 
    return $stmt->fetchAll(); 

Таким образом, вы можете делать все, что вы хотите с $ запросом Названия переменного, вы можете установить пределы и everythign, как это обычный оператор SQL.

Смежные вопросы