TYPO3 8.7.13 — MariaDB QueryBuilder FULLTEXT

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

Этот запрос работает в phpMyAdmin с MariaDB. Теперь моя «проблема» — адаптировать это в TYPO3 с помощью QueryBuilder. Я не вижу оператора MATCH или ПРОТИВ.

Пока моя функция начинается с этого:

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;
}

1

Решение

Расширение Indexed Search в ядре 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
. ')'
);
1

Другие решения

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;
}

Этот работает для меня. Спасибо !

0

По вопросам рекламы [email protected]