Typo3 LTS9 Doctrine: Как использовать mysql @ -Переменные? - PullRequest
0 голосов
/ 04 февраля 2020

Как правильно выполнить следующую команду typo3 SELECT с mysql @ -переменными:

$dbConnection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($extensionTable);
$queryBuilder = $dbConnection->createQueryBuilder();

$query = $queryBuilder
->select('extensionTable.*',
'@dist:=ACOS(ROUND(SIN(RADIANS(geo.coord_lat)) * SIN(RADIANS(52.5234743092278))
   + COS(RADIANS(geo.coord_lat)) * COS(RADIANS(52.5234743092278))
   * COS(RADIANS(geo.coord_lon)      - RADIANS(13.4122033308763)),10)) * 6380 AS distance',
'@distgrp:=CASE WHEN @dist <10 THEN 1 WHEN @dist<25 THEN 2 ELSE truncate(((@dist-25)/25)+3, 0) END AS dist_group')
->from('extensionTable  LEFT JOIN geoTable AS geo ON geo.zip=extensionTable.zip')
->where('pid IN (15,16)');

Это не работает, typo3 вставляет 'перед переменной @dist. неверный результат :

SELECT 'extensionTable'.*, '@dist:=... ' AS 'distance';

Ошибка : во время выполнения возникла исключительная ситуация ... В синтаксисе SQL произошла ошибка;

Связанные топи c (решение не работает с $ queryBuilder-> select ()): Как использовать mysql переменные в doctrine

Я надеюсь, что кто-то может мне помочь. :-) (Или я должен использовать прямой запрос php mysqli ().)

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете предотвратить побег с помощью selectLiteral.

$queryBuilder
  ->select(...)
  ->addSelectLiteral('@dist:=COS(RADIANS(90))')
...