Php 如何在Symfony2中扩展实体存储?

Php 如何在Symfony2中扩展实体存储?,php,oop,symfony,doctrine-orm,Php,Oop,Symfony,Doctrine Orm,我遇到了这个问题,我有一个在所有存储库中重复的方法,例如这个方法 function getAllOrderedBy($column) { $qb = $this->createQueryBuilder('ac') ->select('ac') ->orderBy('ac.' . $column); return $qb->getQuery()->getResult(); } 我想在另一个超类中提取

我遇到了这个问题,我有一个在所有存储库中重复的方法,例如这个方法

function getAllOrderedBy($column) {

    $qb = $this->createQueryBuilder('ac')
            ->select('ac')
            ->orderBy('ac.' . $column);

    return $qb->getQuery()->getResult();
}
我想在另一个超类中提取它,例如OrderedRepository,并将其用作所有其他存储库的基类

现在的问题是如何做到这一点

我试图在OrderedRepository的构造函数中实例化EntityRepository, 像这样的东西,但也实例化了所有的内部对象,其他东西需要,但它没有真正起作用,我觉得这是一条错误的路径

function __construct() {

  parent::__construct();
  $this->blabla_option = "instantiated";
}
请给出一个正确扩展EntityRepository的例子,这样这个扩展类就可以作为其他存储库的基类了


另外,我是PHP的乞丐,如果我的无知伤害了你的感情,请原谅。

这更像是一种教条

假设您正在为条令映射使用注释,则必须声明您在实体中使用的存储库类:

/**
 * @ORM\Entity(repositoryClass="Fully\Qualified\Namespace\To\MyRepository")
 */
class MyEntity { }
如本文所述:

然后,您可以使用标准类继承对这个自定义MyRepository类进行编码

你可以想象这样的情况:

class OrderedRepository extends EntityRepository 
{
    //  some extra methods...
}

class MyRepository extends OrderedRespository {}
最后,如果要覆盖存储库的_构造函数,则必须使用相同的参数初始化父构造函数:

public function __construct($em, Mapping\ClassMetadata $class)
{
    parent::__construct($em, $class);
    // some extra stuff
}

可捕获的致命错误:传递给OrderedRepository的参数2::\uu construct()必须是Metadata\ClassMetadata的实例,Doctrine\ORM\Mapping\ClassMetadata的实例,在第578行的…vendor\Doctrine\lib\Doctrin\ORM\EntityManager.php中调用,并在OrderedRepository.php第18行:公共函数\uu construct中定义($em,ClassMetadata$class)您必须在类的顶部添加相应的use语句,或者键入完全限定的名称空间。例如:公共函数构造($em,条令\ORM\Mapping\ClassMetadata$class)是的,谢谢,它起了作用,尽管现在我需要在每个存储库中实现构造函数,这与最初的目标相冲突:(我不建议您重写构造函数。难道您没有其他解决方案吗?您打算在构造函数中做什么?在这个具体的例子中,我想设置父$entityAlias,它将用于OrderedRepository创建查询。但我认为可能有更合理的原因,可能在这一点上我还没有找到它。)。