使用ContainerAwareCommand执行Query Doctrine

时间:2015-11-05 17:45:39

标签: php symfony doctrine

我从ContainerAwareCommand扩展了我的课程。 我有执行功能,我想执行一个查询。 这是我的$ em和我的$ repo的执行函数。

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

我现在如何执行查询? 感谢。

1 个答案:

答案 0 :(得分:0)

从这一点开始,您有多种方法可以进行查询。

  1. 如果您有一个Cinema实体的自定义存储库,那么您可以在Cinema存储库上创建一个返回您想要获得的结果的方法。或者您可以使用Repository类的find,findBy,findOneBy方法,例如。

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

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

    $ results = $ em-> createQuery(“SELECT c FROM SshBundle:Cinema c”) - > getResult()

  3. 它将返回一个实体集合,其结果与您的条件相符。

    1. 使用查询生成器:

      $ results = $ em-> createQueryBuilder() - > select('c') - > from('SshBundle:Cinema','c') - > getQuery() - > getResult()

    2. 它将与(2)完全相同。

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

        $ results = $ em-> getConnection() - > fetchAll('SELECT * FROM your_table_name')

      2. 在1和2和3中,您可以将参数传递给getResult函数,以便建立结果的水合模式,以将结果作为实体,对象或数组获取。

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

        我希望这会有所帮助。