2016-11-29 83 views
0

新学说。我试图建立一个“列表最近的项目功能”。它应该得到比3个月更新的所有记录但是如果结果少于50个记录,它应该得到更旧的记录,直到取得50个记录获取最近的项目功能与Doctrine

因此,如果我有100个记录比三个月更新,我想返回所有这些但没有更旧。如果我有最近三个月的20条记录,我希望返回它们,以及之后的最近30条记录。

如何与教条做到这一点?如果可能的话,我不想做两个查询(它甚至叫它?)。

现在我EntityRepository只是会从最近三个月内的所有记录如下:

public function fetchRecent($from) 
{ 
    $criteria = new Criteria(); 
    $criteria->where($criteria->expr()->gte('created', $from)); 

    return $this->matching($criteria); 
} 
+0

我看不到如何在单个查询中执行此操作。 –

回答

0

编辑

哼哼,我看有点太快了,你不希望限制记录如果不超过三个月。我不明白如何通过单个查询来实现这一点。 (我会再想一想,但实际上看不到..)

您可以查询数据库以了解最近有多少记录,然后查询实际结果。

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(); 
} 
相关问题