你好,斯塔克·欧弗斯,
在使用Doctrine 2时,我遇到了一些有关自定义存储库和继承的问题。
长话短说,我想建立这样的结构:
这些类的代码如下所示:
BaseEntityRepository:
namespace model\repositories;
use \Doctrine\ORM\EntityRepository;
class BaseEntityRepository extends EntityRepository {
public function findByID($id) {
$result = null;
try {
$dql = "SELECT a FROM " . get_called_class() . " a WHERE a.id = :id";
$query = $this->_em->createQuery($dql);
$query->setParameter("id", $id);
$result = $query->getSingleResult();
} catch (\Exception $ex) {
echo $ex->getMessage();
}
return $result;
}
}SomeEntityRepository:
namespace model\repositories;
class SomeEntityRepository extends BaseEntityRepository {
}我的测试示例代码:
$repo = $em->getRepository("model\\entities\\SomeEntity");
$result = $repo->findByID($id);使用这段代码,我希望$repo能够通过从BaseEntityRepository继承来访问findByID($id)方法。当然,repositoryClass注释用于SomeEntity目标SomeEntityRepository。相反,BaseEntityRepository并不是一个独立的存储库类。
问题是,我得到的只是一个例外:
“模型\存储库\SomeEntityRepository”子类"model\repositories\BaseEntityRepository“不是一个有效的实体或映射的超类。
为了我的缘故,我找不出这段代码有什么问题。也许我错过了一些东西,但是我对存储库中的继承的研究并没有带来任何令人满意的结果。我想对存储库有某种限制,比如要使它们正常工作,所有这些都应该作为repositoryClass至少一次或类似的目标,但这并不能让我满意。
如果你有任何的洞察力,一条建议或一些解决办法,我都是耳朵!再次感谢。
发布于 2014-05-21 21:54:37
问题在于get_called_class,它不会做您想做的事情。
使用理论查询生成器。这样就不需要知道特定的实体类了。
搜索:使用Doctrine的查询生成器查询对象
https://stackoverflow.com/questions/23781592
复制相似问题