Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Symfony2在自定义存储库类中使用查询_Sql_Symfony_Doctrine_Doctrine Orm_Dql - Fatal编程技术网

Sql Symfony2在自定义存储库类中使用查询

Sql Symfony2在自定义存储库类中使用查询,sql,symfony,doctrine,doctrine-orm,dql,Sql,Symfony,Doctrine,Doctrine Orm,Dql,我有一个存储库类,它有一个调用自定义查询的方法。当我试图从控制器内部调用findAllWithRating()时,我遇到以下异常: [2/2] QueryException: [Syntax Error] line 0, col 156: Error: Unexpected 'NULL' 如果我尝试在phpmyadmin中调用查询,那么查询会非常有效 有什么想法吗 <?php namespace Anchorbrands\Bundle\MessageBundle\Entity; use

我有一个存储库类,它有一个调用自定义查询的方法。当我试图从控制器内部调用
findAllWithRating()
时,我遇到以下异常:

[2/2] QueryException: [Syntax Error] line 0, col 156: Error: Unexpected 'NULL'
如果我尝试在phpmyadmin中调用查询,那么查询会非常有效

有什么想法吗

<?php
namespace Anchorbrands\Bundle\MessageBundle\Entity;

use Doctrine\ORM\EntityRepository;

class MessageRepository extends EntityRepository
{

    public function findAllWithRating() {
        return $this->getEntityManager()
            ->createQuery("SELECT id, user_id, title, slug, content, question, image_name, created_at, updated_at,
                    MAX(CASE WHEN rating = '1' THEN totalCount ELSE NULL END) 'Rating 1',
                    MAX(CASE WHEN rating = '2' THEN totalCount ELSE NULL END) 'Rating 2',
                    MAX(CASE WHEN rating = '3' THEN totalCount ELSE NULL END) 'Rating 3'
            FROM
            (
                SELECT  a.id, a.user_id, a.title, a.slug , a.content, a.question, a.image_name, a.created_at, a.updated_at,
                        rating, COUNT(*) totalCount
                FROM    AnchorbrandsMessageBundle:Message a
                        LEFT JOIN AnchorbrandsMessageBundle:Rating b
                            ON a.id = message_id
                GROUP BY a.id, a.user_id, a.title, a.slug, a.content, a.question, a.image_name, a.created_at, a.updated_at, rating
            ) r
            GROUP BY id, user_id, title, slug, content, question, image_name, created_at, updated_at")->getResult();
    }

}

您似乎混合了DQL和SQL。您可以看看使用DQL可以实现什么

看看您的查询,我建议您使用SQL而不是DQL

如何在存储库中执行SQL查询的示例:

$sql = 'SELECT * FROM table WHERE id = :id';
$params = array(
    'id' => 4,
);

return $this->getEntityManager()->getConnection()->executeQuery($sql, $params)->fetchAll();

我像这里描述的那样使用它:重点是我不能使用原始sql,因为在这种情况下,条令不会映射属性。我们可以使用
bind
使用参数吗。?