使用 DQL 的子查询限制在 Doctrine/Symfony
Subquery's with limit in Doctrine/Symfony using DQL
我想知道如何对 1 个查询设置限制,然后根据 selected 结果进行查询。
例如我想select最近的100个帖子并做一些操作。
$first_query= $this->getEntityManager()
->createQuery(
'SELECT p FROM TestBundle:Post p ORDER BY p.date DESC'
)
->setMaxResults(5);
如何在下一个查询中使用此结果 select?
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();
我发现 DQL 不支持限制,所以我选择了原生 sql。
$stmt = $this->getEntityManager()->getConnection()->prepare($query);
$stmt->execute();
return $stmt->fetchAll();
这样你就可以用 $query 变量做任何你想做的事你可以设置限制和一切,因为它是一个普通的 sql 语句。
我想知道如何对 1 个查询设置限制,然后根据 selected 结果进行查询。
例如我想select最近的100个帖子并做一些操作。
$first_query= $this->getEntityManager()
->createQuery(
'SELECT p FROM TestBundle:Post p ORDER BY p.date DESC'
)
->setMaxResults(5);
如何在下一个查询中使用此结果 select?
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();
我发现 DQL 不支持限制,所以我选择了原生 sql。
$stmt = $this->getEntityManager()->getConnection()->prepare($query);
$stmt->execute();
return $stmt->fetchAll();
这样你就可以用 $query 变量做任何你想做的事你可以设置限制和一切,因为它是一个普通的 sql 语句。