我正在使用Symfony2(2.6),我想在名为CRM的命令中使用Contact实体的自定义存储库:fetchEmails。
我尝试了两种不同的方法来获取存储库:
第一种方法:
在我的命令文件的执行功能
中$repository = $this->getContainer()->get('doctrine')->getEntityManager()->getRepository('CRMBundle:Contact');
第二种方法:
在我的命令文件的执行功能
中$repository = $this->getContainer()->get('myrepository');
在config.yml
中myrepository:
class: Doctrine\ORM\EntityRepository
factory: [@doctrine.orm.entity_manager, getRepository]
arguments:
- CRMBundle\Entity\Contact
使用第一种或第二种方法时,执行命令时会出现此错误:
[Symfony\Component\Debug\Exception\ContextErrorException] Notice: Undefined property: Doctrine\ORM\Configuration::$getRepository CRM:fetchEmails [name]
有谁知道如何解决我的问题?
答案 0 :(得分:1)
我会继承ContainerAwareCommand
来解决这个问题:
public class MyCommand extends ContainerAwareCommand
{ ... }
ContainerAwareCommand
是Command的基类,但可以访问容器(就像在基于Controller
的类中一样,因此您可以通过{{1}访问您的仓库}。
让我知道它是否有帮助!
答案 1 :(得分:0)
我通常在services.yml中使用它:
myrepository:
class: Doctrine\ORM\EntityRepository
factory_service: doctrine.orm.entity_manager
factory_method: getRepository
arguments: [ 'CRMBundle\Entity\Contact' ]
希望这个帮助
答案 2 :(得分:0)
在Symfony2.8中,您可以执行以下操作:
$doctrine = $this->getContainer()->get('doctrine');
$em = $doctrine->getEntityManager();
$usersRepo= $doctrine->getRepository('ApplicationSonataUserBundle:User');
$user= $usersRepo->find(1);
$em->persist($$user);