我知道我可以从实体经理那里获得参考资料。但是,我不希望我的服务依赖于实体管理器。相反,我想注入一个Repository类,然后以某种方式从该Repository类中获取一个Reference。这可能吗?
我不想要这个:
<?php
use Doctrine\ORM\EntityManager;
class MyService {
protected $em;
public function __construct(EntityManager $em){
$this->em = $em;
}
public function doSomething($someId)
{
$reference = $this->em->getReference('My\Entity', $someId);
}
}
我想要这样的事情:
<?php
use Doctrine\ORM\EntityRepository;
class MyService {
protected $repo;
public function __construct(EntityRepository $repo){
$this->repo = $repo;
}
public function doSomething($someId)
{
// how to retrieve a reference???
$reference = ???
}
}
答案 0 :(得分:8)
// Add getReference() to the repository
class MyRepository extends Doctrine\ORM\EntityRepository
{
public function getReference($id)
{
return $this->getEntityManager()->getReference($this->getEntityName(),$id));
}
// From a controller
$reference = $repo->getReference($id);
注意使用getEntityName。无需拼出类名,因为存储库已经知道这一点。您实际上可以创建自己的基本存储库类并将其添加到其中。然后从中扩展所有自定义存储库。
考虑添加persist,flush等方法。
答案 1 :(得分:-3)
通过此调用,您将获得您的reference / entity-object
$reference = $this->repo->find($someId);