【发布时间】:2015-11-06 17:59:05
【问题描述】:
假设我在 Doctrine 中有一组实体,每个实体都有一个自定义存储库。
对于其中许多实体,我有一个扩展链,假设 MyEntity extends GenericEntity extends StandardEntity extends BaseEntity 并且存储库遵循相同的方法。
就我而言,这是完全有效的,因为根据 OOP,MyEntity 只是通用基类的一个非常具体的版本。
现在我有一个这样的存储库功能:
public function getCount()
{
$qb = $this->_em->createQueryBuilder();
$qb->select('COUNT(me)');
$qb->from('MyEntity', 'me');
return $qb->getQuery()->getSingleScalarResult();
}
为多个实体提供相同的功能会很棒,我不会避免代码重复。
我的理解选项:
- 接口 iCountableRepository:仅部分有用,因为我需要在课堂上实现。
- 扩展 CountEntityRepository:不适合我的扩展链,在 PHP 中也无法实现多重继承
- 特征 CountableRepository:
这听起来对我来说是最有用的方法。但是是否有可能并建议有类似的东西:
public function getCount()
{
$qb = $this->_em->createQueryBuilder();
$qb->select('COUNT(me)');
$qb->from($this->_entityName, 'me');
return $qb->getQuery()->getSingleScalarResult();
}
在特质中是否可能出现“这”?
或者还有什么方法可以构建可以“注入”到某些选定存储库中的通用存储库函数?
【问题讨论】:
-
一个特征可以正常工作。 KNP 实验室在他们的 DoctrineBehaviours 包中使用它。 (github.com/KnpLabs/DoctrineBehaviors#filterable)
标签: symfony doctrine-orm