【发布时间】:2015-06-22 10:31:20
【问题描述】:
我正在使用 ZF2 和 Doctrine 开发一个网站。我面临的问题是我在代码中使用了 Doctrine 预定义的对象方法,如 findAll()、findOneBy()、findBy() 等。对于一些自定义操作,我为我的一个实体准备了一个自定义存储库。现在我无法访问预定义的方法。我已经使用 findAll() 方法编写了代码。但是在构建存储库之后,我不能简单地访问 findAll() 方法。如何同时访问自定义定义的方法和 Doctrine 定义的方法?
例如:
我正在像这样使用 findOneBy():
$udata = $this->em()->getRepository('Application\Entity\Usermain')->findOneBy(array('userEmail' => 'subh.laha@gmail.com'));
现在我已经准备好了 UsermainRepository,如下所示:
namespace Application\Entity\Repositories;
use Doctrine\ORM\EntityRepository;
use Doctrine\Common\Persistence\ObjectRepository;
class UsermainRepository extends EntityRepository
{
protected $sl;
public function __construct($sl){
$this->sl = $sl;
}
public function customFind($arr)
{
$qb = $this->sl->createQueryBuilder();
$whereStr = '';
if(count($arr)){
foreach($arr as $kvarr=>$varr){
$whereStr .= "u.$kvarr = '".$varr."'";
}
}
$qry = $qb->select('u')
->from('Application\Entity\Usermain','u')
->where($whereStr)
->getQuery()
->getResult();
return $qry;
}
}
现在我可以访问了
$udata = $this->em()->getRepository('Application\Entity\Usermain')->customFind(array('userEmail' => 'subh.laha@gmail.com'));
但不是
$udata = $this->em()->getRepository('Application\Entity\Usermain')->findOneBy(array('userEmail' => 'subh.laha@gmail.com'));
为什么?我已经使用学说定义的方法编写了代码。我现在能做什么?
【问题讨论】:
-
扩展
EntityRepository默认情况下使您可以访问预定义的方法。当您尝试执行findOneBy()时,您究竟会得到什么错误? -
致命错误:在 /var/www/html/new_mpt_hk/mpt_hk/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository 中的非对象上调用成员函数 getUnitOfWork()。第194行的php
-
@SubhasisLaha 你这里有很多问题。为什么更改了类的方法签名?您需要至少拥有
__construct( Doctrine\ORM\EntityManager $em, Doctrine\ORM\Mapping\ClassMetadata $class )。另外你为什么要注入$sl?我假设它代表ServiceLocator?不需要它,$qb = $this->sl->createQueryBuilder();是错误的。
标签: php symfony zend-framework2 doctrine