我从ContainerAwareCommand扩展了我的课程。 我有执行功能,我想执行一个查询。 这是我的$ em和我的$ repo的执行函数。
protected function execute(InputInterface $input, OutputInterface $output){
$em = $this->getContainer()->get('doctrine')->getEntityManager();
$repo = $em->getRepository('SshBundle:Cinema');
我现在如何执行查询? 感谢。
答案 0 :(得分:0)
从这一点开始,您有多种方法可以进行查询。
如果您有一个Cinema实体的自定义存储库,那么您可以在Cinema存储库上创建一个返回您想要获得的结果的方法。或者您可以使用Repository类的find,findBy,findOneBy方法,例如。
$ current = $ repo-> find($ current_id);
您可以使用Doctrine查询语言(DQL)使用entity_manager变量创建查询,在您的情况下为$ em。
$ results = $ em-> createQuery(“SELECT c FROM SshBundle:Cinema c”) - > getResult()
它将返回一个实体集合,其结果与您的条件相符。
使用查询生成器:
$ results = $ em-> createQueryBuilder() - > select('c') - > from('SshBundle:Cinema','c') - > getQuery() - > getResult()
它将与(2)完全相同。
使用原始SQL查询意味着连接。
$ results = $ em-> getConnection() - > fetchAll('SELECT * FROM your_table_name')
在1和2和3中,您可以将参数传递给getResult函数,以便建立结果的水合模式,以将结果作为实体,对象或数组获取。
您的查询也可以返回标量结果,例如COUNT个。实体管理器也有处理它们的方法。
我希望这会有所帮助。