原则 DQL - 逻辑检查选择

我正在尝试在MySQL数据库中的教义DQL中使用类似比较。它直接在 SQL 数据库中工作,如下所示:


SELECT *, (name LIKE '%testO%') as partOfName

from organization

ORDER 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?


江户川乱折腾
浏览 92回答 2
2回答

一只名叫tom的猫

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

狐的传说

你忘了在 LIKE 之后,用字符串替换''->addSelect('(organization.name LIKE %:searchTerm%) AS searchTermIsPartOfName')上->addSelect('(organization.name LIKE \'%:searchTerm%\') AS searchTermIsPartOfName')
打开App,查看更多内容
随时随地看视频慕课网APP