我正在尝试在MySQL数据库中的教义DQL中使用类似比较。它直接在 SQL 数据库中工作,如下所示:SELECT *, (name LIKE '%testO%') as partOfNamefrom organizationORDER BY partOfName DESC;这工作得很好。现在我试着在教义中实现这个逻辑。我的查询构建器如下所示:oQueryBuilder ->from(OrganizationEntity::class, organization) ->select('organization') ->addSelect('(organization.name LIKE %:searchTerm%) AS searchTermIsPartOfName') ->setParameter('searchTerm', $sSearchTerm) ->orderBy('searchTermIsPartOfName', 'DESC');尝试运行它或从中获取SQL会给我以下错误:[语法错误] 行 0,col 97:错误:预期原则\ORM\查询\词法::T_CLOSE_PARENTHESIS,得到“LIKE”这绝对是关于 LIKE 的部分。我注释了最后三行,它的工作原理。如何将上述工作 SQL 转换为教义 DQL?
2 回答

一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
LIKE表达式包含在 DQL 语法中的条件表达式中。不幸的是,不可能直接在 .SelectExpression
但是,您可以在 中使用它们,这些可以在 中使用它们,并且可以复制相同的行为:CaseExpressionSelectExpression
->addSelect('CASE WHEN (organization.name LIKE :searchTerm) THEN 1 ELSE 0 END AS searchTermIsPartOfName')
->setParameter('searchTerm', "%{$sSearchTerm}%")
(你的表达式还有一个小问题 - 我很确定符号需要是参数值的一部分,而不是查询本身)LIKE%

狐的传说
TA贡献1804条经验 获得超3个赞
你忘了在 LIKE 之后,用字符串替换''
->addSelect('(organization.name LIKE %:searchTerm%) AS searchTermIsPartOfName')
上
->addSelect('(organization.name LIKE \'%:searchTerm%\') AS searchTermIsPartOfName')
- 2 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消