2015-11-05 80 views
0

我已经从ContainerAwareCommand扩展了我的类。 我有执行功能,我想执行查询。 这是我的$ em和$ $ repo的执行函数。使用ContainerAwareCommand执行查询原则

protected function execute(InputInterface $input, OutputInterface $output){ 
      $em = $this->getContainer()->get('doctrine')->getEntityManager(); 
      $repo = $em->getRepository('SshBundle:Cinema'); 

我该如何执行查询? 谢谢。

回答

0

您有几种方法可以从这一点进行查询。

  1. 如果您对影院实体的自定义库,那么你可以创建的电影资料库,返回你想要得到的结果的方法。或者你可以使用Repository类的find,findBy,findOneBy方法,例如。

    $ current = $ repo-> find($ current_id);

  2. 您可以使用Doctrine查询语言(DQL)使用entity_manager变量创建查询,在您的情况下为$ em。

    $结果= $ EM->的createQuery( “选择c从SshBundle:电影院C”) - >的getResult()

它会返回一个实体集合与符合您的条件的结果。

  • 使用查询生成器:

    $结果= $ EM-> createQueryBuilder() - >选择( 'C') - 从(> 'SshBundle:电影院' ,'c') - > getQuery() - > getResult()

  • 它会执行与(2)相同的操作。

    1. 使用原始SQL查询意味着连接。

      $结果= $ EM->的getConnection() - >使用fetchall( 'SELECT * FROM your_table_name')

    在图1和2和3中可以为了传递参数到的getResult功能建立结果的水合模式,将结果作为实体,对象或数组提取。

    您的查询还可以返回标量结果,例如COUNT个结果。实体管理器也有处理它们的方法。

    我希望这会有所帮助。