首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理论2:自定义存储库和继承

问理论2:自定义存储库和继承
EN

Stack Overflow用户
提问于 2014-05-21 11:13:43
回答 1查看 2.7K关注 0票数 1

你好,斯塔克·欧弗斯,

在使用Doctrine 2时,我遇到了一些有关自定义存储库和继承的问题。

长话短说,我想建立这样的结构:

  • BaseEntityRepository :包含基于被调用的类名的泛型方法,如findByXXX()
  • SomeEntityRepository :包含与实体类型相关的特定方法

这些类的代码如下所示:

BaseEntityRepository:

代码语言:javascript
复制
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:

代码语言:javascript
复制
namespace model\repositories;

class SomeEntityRepository extends BaseEntityRepository {

}

我的测试示例代码:

代码语言:javascript
复制
$repo = $em->getRepository("model\\entities\\SomeEntity");
$result = $repo->findByID($id);

使用这段代码,我希望$repo能够通过从BaseEntityRepository继承来访问findByID($id)方法。当然,repositoryClass注释用于SomeEntity目标SomeEntityRepository。相反,BaseEntityRepository并不是一个独立的存储库类。

问题是,我得到的只是一个例外:

“模型\存储库\SomeEntityRepository”子类"model\repositories\BaseEntityRepository“不是一个有效的实体或映射的超类。

为了我的缘故,我找不出这段代码有什么问题。也许我错过了一些东西,但是我对存储库中的继承的研究并没有带来任何令人满意的结果。我想对存储库有某种限制,比如要使它们正常工作,所有这些都应该作为repositoryClass至少一次或类似的目标,但这并不能让我满意。

如果你有任何的洞察力,一条建议或一些解决办法,我都是耳朵!再次感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-21 21:54:37

问题在于get_called_class,它不会做您想做的事情。

使用理论查询生成器。这样就不需要知道特定的实体类了。

搜索:使用Doctrine的查询生成器查询对象

http://symfony.com/doc/current/book/doctrine.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23781592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档