Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
Doctrine orm 使用CreateQuery将sql查询转换为Doctrine2查询_Doctrine Orm_Symfony 2.1 - Fatal编程技术网

Doctrine orm 使用CreateQuery将sql查询转换为Doctrine2查询

Doctrine orm 使用CreateQuery将sql查询转换为Doctrine2查询,doctrine-orm,symfony-2.1,Doctrine Orm,Symfony 2.1,我有以下mysql查询 SELECT * FROM ( SELECT CASE WHEN t2.user1=1 THEN t2.user2 ELSE t2.user1 END AS userId FROM t AS t2 WHERE 1 IN (t2.user1,t2.user2) AND t2.[status]=1 ) as tbl WHERE EXISTS ( SELECT NULL F

我有以下mysql查询

SELECT
    *
FROM
(
    SELECT
        CASE WHEN t2.user1=1 THEN t2.user2 ELSE t2.user1 END AS userId
    FROM
        t AS t2
    WHERE 1 IN (t2.user1,t2.user2)
    AND t2.[status]=1
) as tbl
WHERE EXISTS 
(
    SELECT
        NULL
    FROM
        t
    WHERE 2 IN (t.user1,t.user2)
    AND tbl.userId=(CASE WHEN t.user1=2 THEN t.user2 ELSE t.user1 END)
    AND t.[status]=1
)
它工作正常,但我无法将其转换为Doctrine2查询

知道怎么做吗

[编辑] 我已经使用本机SQL来执行查询

$rsm = new ResultSetMapping();
$rsm->addEntityResult('myProject\DataBundle\Entity\Friend', 'f');

    $sql= '
    SELECT
             *
        FROM (
            SELECT 
                CASE WHEN t2.user1=2 THEN t2.user2 ELSE t2.user1 END AS userId
            FROM friends AS t2 
            WHERE 2 IN (t2.user1,t2.user2) 
            AND t2.status=1 
        ) as tbl 
        WHERE EXISTS (
        SELECT 
            NULL 
        FROM 
            friends as t
        WHERE 3 IN (t.user1,t.user2) 
        AND tbl.userId=(CASE WHEN t.user1=3 THEN t.user2 ELSE t.user1_id END) 
        AND t.isFriendOrFollower=1 )';

    $query = $this->getEntityManager()
        ->createNativeQuery($sql,$rsm);
$rows = $conn->fetchAll($sql);

但没有显示结果

我找到了一种使用dbal实现这一点的更简单的方法

1:你必须接通

$conn=$this->container->get('database_connection');
2:编写查询

$sql= '
    SELECT
             *
        FROM (
            SELECT 
                CASE WHEN t2.user1=2 THEN t2.user2 ELSE t2.user1 END AS userId
            FROM friends AS t2 
            WHERE 2 IN (t2.user1,t2.user2) 
            AND t2.status=1 
        ) as tbl 
        WHERE EXISTS (
        SELECT 
            NULL 
        FROM 
            friends as t
        WHERE 3 IN (t.user1,t.user2) 
        AND tbl.userId=(CASE WHEN t.user1=3 THEN t.user2 ELSE t.user1_id END) 
        AND t.isFriendOrFollower=1 )';
3:执行查询

$rsm = new ResultSetMapping();
$rsm->addEntityResult('myProject\DataBundle\Entity\Friend', 'f');

    $sql= '
    SELECT
             *
        FROM (
            SELECT 
                CASE WHEN t2.user1=2 THEN t2.user2 ELSE t2.user1 END AS userId
            FROM friends AS t2 
            WHERE 2 IN (t2.user1,t2.user2) 
            AND t2.status=1 
        ) as tbl 
        WHERE EXISTS (
        SELECT 
            NULL 
        FROM 
            friends as t
        WHERE 3 IN (t.user1,t.user2) 
        AND tbl.userId=(CASE WHEN t.user1=3 THEN t.user2 ELSE t.user1_id END) 
        AND t.isFriendOrFollower=1 )';

    $query = $this->getEntityManager()
        ->createNativeQuery($sql,$rsm);
$rows = $conn->fetchAll($sql);

完成,问题解决。< /P>因为您只是选择标量,您是否考虑使用简单的NATEVESQL?@Ocramius我已经按照您的建议添加了本机sql。但是仍然没有结果您将需要映射标量结果,因为您只选择了一个标量结果column@Ocramius你能告诉我在这种情况下,标量是什么意思吗?