TYPO3 8.7.13 - MariaDB QueryBuilder FULLTEXT

TYPO3 8.7.13 - MariaDB QueryBuilder FULLTEXT

SELECT name 
FROM tx_snippethighlightsyntax_domain_model_snippets 
WHERE (MATCH(name, description, code, comment) AGAINST ('css'));

此查询在带有 MariaDB 的 phpMyAdmin 中有效。现在我的 "problem" 是用 QueryBuilder 在 TYPO3 中修改它。我没有看到任何 MATCH 或 AGAINST 运算符。

到目前为止,我的函数是这样开始的:

private $tx = 'tx_snippethighlightsyntax_domain_model_snippets';

public function ftsSearch()
    {
        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
        $ftsQueryBuilder = $connectionPool->getQueryBuilderForTable($this->tx);
        $fts = $ftsQueryBuilder
            ->select($this->tx . '.name')
            ->from($this->tx)
            ->where($ftsQueryBuilder->expr()->eq(
                MAGIC HAPPENS HERE ?
            )
            ->execute()
            ->fetchAll();
        return $fts;
    }

TYPO3 核心中的扩展索引搜索在查询中使用 MATCH 和 AGAINST。

以下摘自 IndexSearchRepository 的代码应该可以帮助您构建查询

    $searchBoolean = '';
    if ($searchData['searchBoolean']) {
        $searchBoolean = ' IN BOOLEAN MODE';
    }
    $queryBuilder->andWhere(
        'MATCH (' . $queryBuilder->quoteIdentifier($searchData['fulltextIndex']) . ')'
        . ' AGAINST (' . $queryBuilder->createNamedParameter($searchData['searchString'])
        . $searchBoolean
        . ')'
    );
private $tx = 'tx_snippethighlightsyntax_domain_model_snippets';

public function ftsSearch()
{
    $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
    $ftsQueryBuilder = $connectionPool->getQueryBuilderForTable($this->tx);
    $fts = $ftsQueryBuilder
        ->select($this->tx . '.name')
        ->from($this->tx)
        ->where('MATCH('
            . $this->tx .'.name,'
            . $this->tx .'.description,'
            . $this->tx .'.code,'
            . $this->tx .'.comment)'
            . ' AGAINST(' . $ftsQueryBuilder->createNamedParameter('put_search_here')
            . ')')
        ->execute()
        ->fetchAll();
    return $fts;
}

这个对我有用。谢谢!