能够使用 Doctrine 加速了很多事情,但是让我不得不在我的所有控制器中设置/使用实体管理器感觉有点笨拙。我希望将所有数据库逻辑放在 1 个特定模块中。也许我只是想错了方向,有人可以指出我正确的方向。
目前我有我的实体,它的功能很好,我可以通过以下方式很好地插入数据库
namespace Manage\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class ViewController extends AbstractActionController {
public function somethingAction(){
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$user = new \Manage\Entity\User();
$user->setname('foo');
$user->settitle('bar');
$objectManager->persist($user);
$objectManager->flush();
}
}
但是,每当我想从数据库中选择一些东西时,我必须确保添加
use Doctrine\ORM\EntityManager;
然后是以下控制器功能列表...
/**
* @var EntityManager
*/
protected $entityManager;
/**
* Sets the EntityManager
*
* @param EntityManager $em
* @access protected
* @return PostController
*/
protected function setEntityManager(EntityManager $em) {
$this->entityManager = $em;
return $this;
}
/**
* Returns the EntityManager
*
* Fetches the EntityManager from ServiceLocator if it has not been initiated
* and then returns it
*
* @access protected
* @return EntityManager
*/
protected function getEntityManager() {
if (null === $this->entityManager) {
$this->setEntityManager($this->getServiceLocator()->get('Doctrine\ORM\EntityManager'));
}
return $this->entityManager;
}
一旦我添加了所有这些,我现在可以像这样在我的 getsomethingAction 中进行查询......
public function getsomethingAction() {
$repository = $this->getEntityManager()->getRepository('Manage\Entity\User');
$list = $repository->findAll();
var_dump($list);
return new ViewModel();
}
对我来说这感觉很笨拙......我可以在不需要所有额外功能的情况下进行插入,但我不能进行选择?是否可以扩展实体类以获取通过调用 $repository = $this->getEntityManager()->getRepository('Manage\Entity\User'); 提供的 find/findAll 等功能 直接在实体内部?
我的意思是我希望能够像设置数据时那样直接在实体上运行查找...如下所示:
public function getsomethingAction(){
$list = new \Manage\Entity\User();
$l = $list->findAll();
var_dump($l);
return new ViewModel();
}