Doctrine orm 使用CreateQuery将sql查询转换为Doctrine2查询
我有以下mysql查询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
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你能告诉我在这种情况下,标量是什么意思吗?