Скрытый SQL запрос к построителю запросов TYPO3? - PullRequest
0 голосов
/ 01 апреля 2020

Как преобразовать запрос SQL в построитель запросов TYPO3.

SELECT * FROM tableName ORDER BY (CASE WHEN DATE(dateColumn) < DATE(GETDATE()) THEN 1 ELSE 0
     END) DESC, dateColumn ASC

введите описание ссылки здесь

Та же функциональность, которая мне нужна в построителе запросов typo3.

1 Ответ

0 голосов
/ 03 апреля 2020

Чтобы получить отправленный вами запрос sql, вы можете сделать это следующим образом:

// little helper function to debug querybuilder,
// queries with parameter placeholders
function debugQuery(QueryBuilder $builder)
{
    $preparedStatement  = $builder->getSQL();
    $parameters         = $builder->getParameters();
    $stringParams = [];
    foreach ($parameters as $key => $parameter) {
        $stringParams[':' . $key] = $parameter;
    }
    return strtr($preparedStatement, $stringParams);
}

// get querybuilder
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
    ->getConnectionByName('Default')
    ->createQueryBuilder();

// build query
$queryBuilder
    ->select('*')
    ->from('table')
    ->getConcreteQueryBuilder()->orderBy(
        '(CASE WHEN DATE('
          .$queryBuilder->quoteIdentifier('dateColumn')
          .') < DATE(GETDATE()) THEN 1 ELSE 0 END)',
        'DESC'
    )
;
$queryBuilder->addOrderBy('dateColumn', 'ASC');

// build query
$sql = debugQuery($queryBuilder);

Генерирует следующий запрос sql:

SELECT 

FROM `table` 
ORDER BY 
  (CASE WHEN DATE(`dateColumn`) < DATE(GETDATE()) THEN 1 ELSE 0 END) DESC, 
  `dateColumn` ASC

Некоторые примечания рядом с: Насколько мне известно, GETDATE() не является действительным mysql методом, более MS SQL. В конце концов вы хотите использовать CURRENT_DATE () вместо этого.

edit # 1

Не проверено / запустится ... просто создала строку sql в соответствии с тем, что вы указали. Поэтому не вините меня, если sql запрос сам по себе неправильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...