我在查询生成器中遇到问题:
我有SyntaxError:
[Syntax Error] line 0, col 243: Error: Expected '.' or '(', got 'type'
QueryException: SELECT z as task, GROUP_CONCAT(DISTINCT o.tahoObject) as type FROM Cloud\CrmBundle\Entity\Tasks z LEFT JOIN z.taskOwner u LEFT JOIN z.taskTasksHasObject o WHERE z.taskDone = :ztaskDone AND u.userFirstnameLastname = :uuserFirstnameLastname AND type LIKE :type GROUP BY z.taskId ORDER BY z.taskDate desc
我像查询生成器一样添加:
$qb->andWhere($filter['field'][0].' LIKE :' :type);
$qb->setParameter('type', '%'.$eachOption.'%');
我通过'getParameters()'检查了类型paremeter是否正确给出所以我不明白为什么我有这个语法错误... Group_concat也正常工作,问题是只有当我添加像...有什么想法吗?
答案 0 :(得分:0)
这是您当前的查询 - 它是错误的,因为在WHERE子句中它不知道名为type
的字段:
SELECT
z as task,
GROUP_CONCAT(DISTINCT o.tahoObject) as type
FROM Cloud\CrmBundle\Entity\Tasks z
LEFT JOIN z.taskOwner u
LEFT JOIN z.taskTasksHasObject o
WHERE z.taskDone = :ztaskDone
AND u.userFirstnameLastname = :uuserFirstnameLastname
AND type LIKE :type
GROUP BY z.taskId
ORDER BY z.taskDate desc
要解决此问题,您需要通过在where子句中使用GROUP_CONCAT来重构查询(但我不确定您是否可以在where子句中的GROUP_CONCAT内部执行DISTINCT - 您可以尝试):
SELECT
z.taskId as task, -- z as task did not make sense to me
GROUP_CONCAT(DISTINCT o.tahoObject) as type
FROM Cloud\CrmBundle\Entity\Tasks z
LEFT JOIN z.taskOwner u -- ON ... is missing
LEFT JOIN z.taskTasksHasObject o -- ON ... is missing
WHERE z.taskDone = :ztaskDone
AND u.userFirstnameLastname = :uuserFirstnameLastname
AND GROUP_CONCAT(DISTINCT o.tahoObject) LIKE :type
GROUP BY z.taskId
ORDER BY z.taskDate desc
或者您可能需要执行嵌套查询:
SELECT task, type
FROM (
SELECT
z.taskId as task, -- z as task did not make sense to me
GROUP_CONCAT(DISTINCT o.tahoObject) as type
FROM Cloud\CrmBundle\Entity\Tasks z
LEFT JOIN z.taskOwner u -- ON ... is missing
LEFT JOIN z.taskTasksHasObject o -- ON ... is missing
WHERE z.taskDone = :ztaskDone
AND u.userFirstnameLastname = :uuserFirstnameLastname
GROUP BY z.taskId
ORDER BY z.taskDate desc
) x
WHERE x.type LIKE :type
我还想指出,您的LEFT JOINS似乎缺少连接条件。此外,选择z as task
对我来说没有意义。也许你的意思是z.taskId as task
?祝你好运!