我正在開發一個使用ZF2和Doctrine的網站。我面臨的問題是我在我的代碼中使用Doctrine預定義的對象方法,如findAll(),findOneBy(),findBy()等。對於一些自定義操作,我爲我的一個實體準備了一個定製Repository。現在我無法訪問預定義的方法。我已經使用findAll()方法編寫了代碼。但是在構建存儲庫之後,我不能簡單地訪問findAll()方法。我怎樣才能訪問我自定義的方法以及Doctrine定義的方法?如何訪問自定義存儲庫後的Doctrine定義的方法?
例如:
我使用findOneBy()這樣的:
$udata = $this->em()->getRepository('Application\Entity\Usermain')->findOneBy(array('userEmail' => '[email protected]'));
現在我已經準備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' => '[email protected]'));
B ut不是
$udata = $this->em()->getRepository('Application\Entity\Usermain')->findOneBy(array('userEmail' => '[email protected]'));
爲什麼?我已經使用教義定義的方法編寫代碼。我現在能做什麼?
通過擴展'EntityRepository',您可以訪問默認的預定義方法。當你嘗試執行'findOneBy()'時,你會得到什麼錯誤? – Artamiel
致命錯誤:在194行上的/var/www/html/new_mpt_hk/mpt_hk/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php中的非對象上調用成員函數getUnitOfWork() –
@SubhasisLaha這裏有很多問題。爲什麼改變了這個類的方法簽名?你至少需要*擁有'__construct(Doctrine \ ORM \ EntityManager $ em,Doctrine \ ORM \ Mapping \ ClassMetadata $ class)'。另外你爲什麼要注射'$ sl'?我假設它代表'ServiceLocator'?不需要它,'$ qb = $ this-> sl-> createQueryBuilder();'只是錯誤的。 – AlexP