php - Doctrine JOIN 与 DQL 中的子查询
问题描述
我有这个 SQL:
SELECT
s.id,
e.exception,
s.name,
w.url,
w.web_id,
w.active,
w.suspended,
r.email,
p.name as partner,
p.id as partnerId,
group_concat(c.name) names,
group_concat(c.email) emails,
group_concat(c.tel) tels
FROM
service s
JOIN web w ON s.web_id = w.id
JOIN rus r ON w.rus_id = r.id
JOIN partner p ON r.partner_id = p.id
LEFT JOIN exception e ON e.service_id = s.id
JOIN contact c ON c.partner_id = c.id
where c.main = 1 or c.important = 1
group by s.id
当我尝试将其转换为 DQL
$result = $this->_em
->createQuery(
'SELECT s.name, w.webId, r.email, p.name as PartnerName
FROM App\Model\Database\Entity\Service s
JOIN App\Model\Database\Entity\Web w WITH s.web = w.id
JOIN App\Model\Database\Entity\Rus r WITH w.rus = r.id
JOIN App\Model\Database\Entity\Partner p WITH r.partner = p.id
LEFT JOIN App\Model\Database\Entity\Exception e WITH e.service = s.id
LEFT JOIN (SELECT
p.id,
group_concat(c.name) names,
group_concat(c.tel) tels,
group_concat(c.email) emails
FROM
App\Model\Database\Entity\Partner p
LEFT JOIN App\Model\Database\Entity\Contact c WITH c.partner = p.id
where c.main = 1 or c.important = 1
group by p.id) test
WHERE test.id = p.id'
)->getResult();
return new ArrayCollection($result);
我越来越:
[Semantical Error] line 0, col 452 near 'JOIN (SELECT\r\n ': Error: Subquery is not supported here
使用 QueryBuilder 是一样的..
在 DQL 或使用 QueryBuilder 中使用左连接和子查询有什么技巧吗?
谢谢
解决方案
DQL 是关于查询对象的。在 FROM 子句中支持子选择意味着 DQL 解析器无法再构建结果集映射(因为子查询返回的字段可能不再与对象匹配)。
你最好的选择是使用 sql
$conn = $this->getEntityManager()->getConnection();
$sql = 'Your query';
$stmt = $conn->prepare($sql);
$stmt->execute(); //Bind what parameters you need
推荐阅读
- r - R中的Box Cox转换故障排除(需要使用for循环或应用)
- arrays - 数组中两个元素的最大和减去它们之间的距离
- ios - 使用自定义单元格从搜索中更新 tableView
- r - 根据列名、ID 号和其他数据框中的键值替换数据框中的值
- c - 如何使用 cJSON 在名称/值对中查找名称
- javascript - 如何在css和js中创建一个带有向鼠标指针旋转的字符串的球体?
- xpages - documentId 解析代码没有被执行 XPages
- python-3.x - 在大于 9 的整数之后 提供的绑定数量不正确。当前语句使用 1,并且提供了 2
- javascript - Javascript/jquery - 在 dom 中上升 2 级(让我们将此对象称为“A”),然后将 css 应用于“A”的其中一个孩子
- java - 你能说出这个工作背后的概念吗?