Symfony 在没有基本存储库的多个实体存储库中具有相同的功能?
假设我在条令中有一组实体,每个实体有一个自定义存储库 对于这些实体中的许多实体,我有一个扩展链,比如MyEntity扩展GenericEntity扩展StandardEntity扩展BaseEntity,存储库也遵循相同的方法 在我的例子中,这是完全有效的,因为根据OOP,MyEntity只是公共基类的一个非常特定的版本 现在我有了一个存储库功能,如下所示:Symfony 在没有基本存储库的多个实体存储库中具有相同的功能?,symfony,doctrine-orm,Symfony,Doctrine Orm,假设我在条令中有一组实体,每个实体有一个自定义存储库 对于这些实体中的许多实体,我有一个扩展链,比如MyEntity扩展GenericEntity扩展StandardEntity扩展BaseEntity,存储库也遵循相同的方法 在我的例子中,这是完全有效的,因为根据OOP,MyEntity只是公共基类的一个非常特定的版本 现在我有了一个存储库功能,如下所示: public function getCount() { $qb = $this->_em->createQu
public function getCount()
{
$qb = $this->_em->createQueryBuilder();
$qb->select('COUNT(me)');
$qb->from('MyEntity', 'me');
return $qb->getQuery()->getSingleScalarResult();
}
多个实体拥有相同的功能将是非常好的,我不想避免代码重复
我的理解:
public function getCount()
{
$qb = $this->_em->createQueryBuilder();
$qb->select('COUNT(me)');
$qb->from($this->_entityName, 'me');
return $qb->getQuery()->getSingleScalarResult();
}
“这”在一个特质中可能吗
或者,还有什么方法可以构建可以“注入”到某些选定存储库中的通用存储库功能?对于这样的东西,trait是完全合适的。 但您也可以扩展基本存储库。我真的不明白为什么这不可能。我认为你应该能够做到这一点:
<?php
namespace Application\Repository;
use Countable;
class BaseEntityRepository extends EntityRepository implements Countable
{
/**
* Count items in this repository
*
* @return int
*/
public function count()
{
$qb = $this->createQueryBuilder('b');
$qb->select('COUNT(b)');
return $qb->getQuery()->getSingleScalarResult();
}
}
一个特性就可以了。KNP实验室在他们的博士行为包中使用它。()谢谢,我同意——显然我的问题不太清楚。当然,这种方法在这里是有效的,但是如果MyEntityA从GenericA/StandardA扩展而MyEntityB从GenericB扩展而来呢。如果没有公共根元素。但你已经帮了我一把了!非常感谢@您的实体类彼此不扩展并不意味着您不能使用相同的基本存储库类。但是一个特征可能更好。。。
<?php
namespace Application\Repository;
class StandardEntityRepository extends BaseEntityRepository
{
}
<?php
namespace Application\Repository;
class GenericEntityRepository extends StandardEntityRepository
{
}
<?php
namespace Application\Repository;
class MyEntity extends GenericEntityRepository
{
}