为了账号安全,请及时绑定邮箱和手机立即绑定

原则 DQL - 逻辑检查选择

原则 DQL - 逻辑检查选择

PHP
江户川乱折腾 2022-09-12 12:59:15
我正在尝试在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%


查看完整回答
反对 回复 2022-09-12
?
狐的传说

TA贡献1804条经验 获得超3个赞

你忘了在 LIKE 之后,用字符串替换''

->addSelect('(organization.name LIKE %:searchTerm%) AS searchTermIsPartOfName')

->addSelect('(organization.name LIKE \'%:searchTerm%\') AS searchTermIsPartOfName')


查看完整回答
反对 回复 2022-09-12
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号