简体   繁体   English

TYPO3 Extbase查询与CONCAT

[英]TYPO3 Extbase query with CONCAT

Is it possible to use CONCAT in an extbase query like this one? 是否可以在像这样的extbase查询中使用CONCAT?

$query = $this->createQuery();
$query
  ->matching(
    $query->logicalOr(
      $query->like('street', '%' . $search . '%'),
      $query->like('street_number', '%' . $search . '%'),
    )
  )
  ->execute();

Now, I'ld like to also query for CONCAT(street, ' ', street_number). 现在,我还要查询CONCAT(street,'',street_number)。

The resulting SQL query should look like this: 产生的SQL查询应如下所示:

SELECT * FROM myTable WHERE street LIKE '%abc%' OR street_number LIKE '%abc%' OR CONCAT(street, ' ', street_number) LIKE '%abc%';

You may use statement() for this kind of query if you are using TYPO3 below version 8 LTS. 如果您使用的是低于版本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();

In TYPO3 8 LTS the new Doctrine DBAL should have functions for this, too. 在TYPO3 8 LTS中,新的Doctrine DBAL也应具有此功能。 But I don't have a snippet next to my hand right now. 但是我的手旁边没有代码段。

With Doctrine DBAL you can use getConcatExpression from DatabasePlatform of your current Connection to the table: 使用Doctrine getConcatExpression ,您可以从当前Connection到表的DatabasePlatform中使用getConcatExpression

/** @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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM