带有 CONCAT 的 TYPO3 Extbase 查询
TYPO3 Extbase query with CONCAT
是否可以在像这样的 extbase 查询中使用 CONCAT?
$query = $this->createQuery();
$query
->matching(
$query->logicalOr(
$query->like('street', '%' . $search . '%'),
$query->like('street_number', '%' . $search . '%'),
)
)
->execute();
现在,我还想查询 CONCAT(street, ' ', street_number)。
生成的 SQL 查询应如下所示:
SELECT * FROM myTable WHERE street LIKE '%abc%' OR street_number LIKE '%abc%' OR CONCAT(street, ' ', street_number) LIKE '%abc%';
如果您使用低于版本 8 LTS 的 TYPO3,您可以使用 statement() 进行此类查询。
$query = $this->createQuery();
$query
->statement('SELECT * FROM myTable WHERE street LIKE "%abc%" OR street_number LIKE "%abc%" OR CONCAT(street, " ", street_number) LIKE "%abc%"')
)
->execute();
在 TYPO3 8 LTS 中,新的 Doctrine DBAL 也应该有这方面的功能。但是我现在手边没有代码片段。
通过 Doctrine DBAL,您可以使用 getConcatExpression
从 DatabasePlatform
of your current Connection
to the table:
/** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
$queryBuilder = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getQueryBuilderForTable('myTable');
/** @var \TYPO3\CMS\Core\Database\Connection $connection */
$connection = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getConnectionForTable('myTable');
$query = $queryBuilder
->select('*')
->from('myTable')
->where(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->like(
'street',
$queryBuilder->createNamedParameter('%abc%', \PDO::PARAM_STR)
),
$queryBuilder->expr()->like(
'street_number',
$queryBuilder->createNamedParameter('%abc%', \PDO::PARAM_STR)
),
$queryBuilder->expr()->comparison(
$connection->getDatabasePlatform()->getConcatExpression('street, \' \', street_number'),
'LIKE',
$queryBuilder->createNamedParameter('%abc%', \PDO::PARAM_STR)
)
)
)
->execute();
是否可以在像这样的 extbase 查询中使用 CONCAT?
$query = $this->createQuery();
$query
->matching(
$query->logicalOr(
$query->like('street', '%' . $search . '%'),
$query->like('street_number', '%' . $search . '%'),
)
)
->execute();
现在,我还想查询 CONCAT(street, ' ', street_number)。
生成的 SQL 查询应如下所示:
SELECT * FROM myTable WHERE street LIKE '%abc%' OR street_number LIKE '%abc%' OR CONCAT(street, ' ', street_number) LIKE '%abc%';
如果您使用低于版本 8 LTS 的 TYPO3,您可以使用 statement() 进行此类查询。
$query = $this->createQuery();
$query
->statement('SELECT * FROM myTable WHERE street LIKE "%abc%" OR street_number LIKE "%abc%" OR CONCAT(street, " ", street_number) LIKE "%abc%"')
)
->execute();
在 TYPO3 8 LTS 中,新的 Doctrine DBAL 也应该有这方面的功能。但是我现在手边没有代码片段。
通过 Doctrine DBAL,您可以使用 getConcatExpression
从 DatabasePlatform
of your current Connection
to the table:
/** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
$queryBuilder = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getQueryBuilderForTable('myTable');
/** @var \TYPO3\CMS\Core\Database\Connection $connection */
$connection = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getConnectionForTable('myTable');
$query = $queryBuilder
->select('*')
->from('myTable')
->where(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->like(
'street',
$queryBuilder->createNamedParameter('%abc%', \PDO::PARAM_STR)
),
$queryBuilder->expr()->like(
'street_number',
$queryBuilder->createNamedParameter('%abc%', \PDO::PARAM_STR)
),
$queryBuilder->expr()->comparison(
$connection->getDatabasePlatform()->getConcatExpression('street, \' \', street_number'),
'LIKE',
$queryBuilder->createNamedParameter('%abc%', \PDO::PARAM_STR)
)
)
)
->execute();