Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用CONCAT的TYPO3 Extbase查询_Mysql_Typo3_Extbase - Fatal编程技术网

Mysql 使用CONCAT的TYPO3 Extbase查询

Mysql 使用CONCAT的TYPO3 Extbase查询,mysql,typo3,extbase,Mysql,Typo3,Extbase,在像这样的extbase查询中可以使用CONCAT吗 $query = $this->createQuery(); $query ->matching( $query->logicalOr( $query->like('street', '%' . $search . '%'), $query->like('street_number', '%' . $search . '%'), ) ) ->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中,新的原则DBAL也应该具有这方面的功能。但是我现在手头没有一个代码片段。

如果您使用的是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中,新的原则DBAL也应该具有这方面的功能。但是我现在手头没有一个代码片段。

使用Doctrine DBAL,您可以使用当前连接到表的
数据库平台
中的
GetConcateExpression

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

使用DBAL,您可以使用当前
连接的
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();

我希望有一个比使用函数“statement”更好的解决方案。如果我找到一个DBAL的例子,我会在这里发布。我希望有一个比使用函数“语句”更好的解决方案。如果我找到一个DBAL的例子,我会在这里发布。遗憾的是,这在
update
查询中不起作用。那里的值总是被引用。遗憾的是,这在
update
查询中不起作用。那里的值总是被引用的。