Mon*_*hus 5 php oop symfony doctrine-orm
我遇到了这个问题我在所有存储库中都有一个重复的方法,例如这个方法.
function getAllOrderedBy($column) {
$qb = $this->createQueryBuilder('ac')
->select('ac')
->orderBy('ac.' . $column);
return $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
我想在另一个超类OrderedRepository中提取它,并将其用作所有其他存储库的基类.
现在的问题是如何做到这一点?
我尝试在OrderedRepository的构造函数中实例化EntityRepository,就像这样,但也实例化了所有内部对象,这是其他东西所需要的,但它并没有真正起作用,我觉得这是错误的路径.
function __construct() {
parent::__construct();
$this->blabla_option = "instantiated";
}
Run Code Online (Sandbox Code Playgroud)
能否举一个正确扩展EntityRepository的例子,这个扩展类可以作为其他存储库的基类?
PS我是PHP的初学者,所以如果我因为不知不觉而伤害你的感情,请原谅.
Flo*_*ian 13
这更像是一个Doctrine2的东西.
假设您正在为学说映射使用注释,则必须声明您在实体中使用的存储库类:
/**
* @ORM\Entity(repositoryClass="Fully\Qualified\Namespace\To\MyRepository")
*/
class MyEntity { }
Run Code Online (Sandbox Code Playgroud)
如下所述:http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-classes.
然后,您可以使用标准类继承对此自定义MyRepository类进行编码.
你可以想象这样的事情:
class OrderedRepository extends EntityRepository
{
// some extra methods...
}
class MyRepository extends OrderedRespository {}
Run Code Online (Sandbox Code Playgroud)
最后,如果要覆盖存储库的__constructor,则必须使用相同的参数初始化父构造函数:
public function __construct($em, Mapping\ClassMetadata $class)
{
parent::__construct($em, $class);
// some extra stuff
}
Run Code Online (Sandbox Code Playgroud)