我偶然发现了interesting question about Doctrine's findAll() method。
OP询问他如何用findAll()
标准调用limit
,而Doctrine2本身不支持这些标准。接受的答案明智地建议他查看这个方法的源代码,我们从中了解到findAll()
只是用特定的参数调用findBy()
。
通过直接致电,可以通过findAll()
13来调用limit
:
findBy(array(), array('id' => 'DESC'), 13);
但是在阅读代码时,最后一条指令并不像看起来像这样的调用那么简单:
findAllWithLimit(13);
我的问题是:如果我想在整个应用程序范围内使用此方法属于哪种方式?
public function findAllWithLimit($limit)
{
return $em->findBy(array(), array('id' => 'DESC', $limit);
}
答案 0 :(得分:1)
第一种解决方案(不太灵活/超级简单)
您需要覆盖config.yml中的默认Repository类并自行创建。
让我们创建您自己的基本存储库类:
namespace My\BaseBundle\Repository; // you will want to change
use Doctrine\ORM\EntityRepository as BaseEntityRepository;
class EntityRepository extends BaseEntityRepository
{
public function findAllWithLimit($limit) {
// your logic
}
}
然后在config.yml文件中,您将定义实体管理器的默认实体存储库。
doctrine:
orm:
entity_managers:
default: # you will have to figure out what the value is in your config.yml file
default_repository_class: My\BaseBundle\Repository\EntityRepository # make sure to put the proper namespace
有关Symfony中的更多Doctrine选项,请查看configuration reference here。
第二种解决方案(最灵活/最长的)
您可以创建自己的custom repository class并让它扩展您自己的基础存储库类。
例如,您自己的基础存储库类将是:
namespace My\BaseBundle\Repository;
use Doctrine\ORM\EntityRepository as BaseEntityRepository;
class EntityRepository extends BaseEntityRepository
{
public function findAllWithLimit($limit) {
// your logic
}
}
虽然每个存储库类看起来像:
namespace My\AwesomeBundle\Repository;
use My\BaseBundle\Repository\EntityRepository;
class DogRepository extends EntityRepository
{
}
然后定义Dog
实体,使其指向DogRepository
类。我给你的文件应该教你如何做。
此解决方案需要更多代码,但使代码更清晰,因为它允许将存储库调用拆分为方法。
希望它有所帮助!