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などの関数を取得するためにEntityクラスを拡張することは可能ですか?エンティティ内に直接?
つまり、データを設定するときと同じように、エンティティに対して直接検索を実行できるようにしたいと思います...以下のように:
public function getsomethingAction(){
$list = new \Manage\Entity\User();
$l = $list->findAll();
var_dump($l);
return new ViewModel();
}