新的学说。我正在尝试构建"列表最新项目功能"。它应该使所有记录更新,> ,如果结果小于50记录,则应该使较旧的记录在获取50个记录之前。
所以,如果我有100个比三个月更新的记录,我想退还所有记录,但没有什么年龄段的记录。如果我有20个记录,我想退还它们,以及此后的30个记录。
一个人将如何使用学说?我不想提出两个查询(如果可能的话,甚至叫它?
目前,我的EntityRepository只是从过去三个月中获取所有记录,如下所示:
public function fetchRecent($from)
{
$criteria = new Criteria();
$criteria->where($criteria->expr()->gte('created', $from));
return $this->matching($criteria);
}
edit
哼,我读得太快了,如果不超过三个月,您就不想限制记录。我看不到如何通过单个查询来实现这一目标。(我会再考虑一下,但实际上看不到。)
您可以查询数据库以了解有多少记录,然后查询实际结果。
public function fetchRecent($from, $nbRecords = 50)
{
$count = $this->createQueryBuilder('c')
->select('COUNT(c.id)')
->andWhere('c.created >= :from')->setParameter('from', $from)
->addOrderBy('c.created', 'desc');
$nbNewer = $count->getQuery()->getSingleScalarResult();
$query = $this->createQueryBuilder('q');
if ($nbNewer<$nbRecords) {
$query->setMaxResults($nbRecords);
} else {
$query->andWhere('q.created >= :from')->setParameter('from', $from);
}
$query->addOrderBy('q.created', 'desc');
return $query->getQuery()->getResult();
}