【问题标题】:Typo3 11: Using QueryBuilder with REGEX_REPLACETypo3 11:将 QueryBuilder 与 REGEX_REPLACE 结合使用
【发布时间】:2023-02-13 16:30:37
【问题描述】:

我为我的前端插件实现了一个简单的搜索栏。 现在我要搜索的文本是富文本,并且在数据库字段中包含 html 标签。

我发现通过这样一个简单的查询条件,我可以忽略 HTML 标签并正确过滤文本:

WHERE REGEXP_REPLACE(a.content, '<[^>]*>', '') LIKE '%my search word%'

但是,我没有找到让 Typo3 Querybuilder 和 Expressionbuilder 执行此类操作的选项。

我尝试像这样将 REGEXP_REPLACE 与 QueryBuilder 一起使用:

)->orWhere(
                $queryBuilder->expr()->like(
                    $queryBuilder->expr()->literal("REGEXP_REPLACE(a.content, '<[^>]*>', '')", 0),
                    $queryBuilder->createNamedParameter('%' . $queryBuilder->escapeLikeWildcards($searchWord) . '%')
                )
            )

Typo3 生成的查询部分如下所示:

WHERE (`'REGEXP_REPLACE(a`.`content, \'<[^>]*>\', \'\')'` LIKE ?))

这会导致未知的列错误。

【问题讨论】:

  • 我更愿意使用 $queryBuilder->add('where', 'REGEXP_REPLACE...LIKE...', true);

标签: mysql typo3 typo3-11.x


【解决方案1】:

看一下 QueryBuilder 的 add() 方法: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Database/QueryBuilder/Index.html#add

您的代码应使用:

$queryBuilder->add('where', 'REGEXP_REPLACE(a.content, '<[^>]*>', '') LIKE '%my search word%'')

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 2017-01-18
    • 2020-11-17
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多