Doctrine2是否具有与ActiveRecord的named scopes类似的功能?
答案 0 :(得分:2)
没有一个被烘焙到D2中,但使用Doctrine 2的QueryBuilder类实现类似于Yii的系统可能不会太过分,这允许您构建一个查询,使用更具程序性的方法。
$qb = $em->createQueryBuilder;
$qb->select('u')
->from('User', 'u')
->where('active IS NOT NULL);
似乎Yii的实现将查询条件存储在数组中,并且在使用命名范围时将它们注入到查询中。您可以轻松地执行类似的操作,返回一个QueryBuilder对象,并预先加载这些参数。
class UserRepository extends EntityRepository
{
private $_namedScopes;
public getActiveUsersWhoLoggedInLastWeek()
{
// return a query builder for this model
$qb = $this->_namedScopes->initScope();
// start adding pre-defined criteria
$qb = $this->_namedScopes->addScope($qb, 'active')
$qb = $this->_namedScopes->addScope($qb, 'lastWeek');
return $qb->getQuery()->getResult();
}
}
可能有几种不同的方法可以解决这个问题,所以这只是一个简单的例子。困难的部分可能是弄清楚如何处理标准碰撞。
答案 1 :(得分:0)