Как сделать сложный Doctrine для выбора с TYPO3 8.7? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь перенести устаревший запрос MySQL в TYPO3 8.7 с Doctrine.

Устаревший оператор SQL:

SELECT
tt_address.*,
( 6371.41 * acos( cos( radians('.$lat.') ) * cos( radians(tt_address.tx_geosearch_lat ) ) * cos( radians(tt_address.tx_geosearch_lng ) - radians('.$lng.') ) + sin( radians('.$lat.') ) * sin( radians(tt_address.tx_geosearch_lat ) ) ) ) AS distance
FROM tt_address

Моя попытка с TYPO3 8.7:

$statement = $queryBuilder
->select(
    'tt_address.*',
    '( 6371.41 * acos( cos( radians(' . $queryBuilder->createNamedParameter($lat, \PDO::PARAM_STR) . ') ) * cos( radians(tt_address.tx_geosearch_lat ) ) * cos( radians(tt_address.tx_geosearch_lng ) - radians(' . $queryBuilder->createNamedParameter($lng, \PDO::PARAM_STR) . ') ) + sin( radians(' . $queryBuilder->createNamedParameter($lat, \PDO::PARAM_STR) . ') ) * sin( radians(tt_address.tx_geosearch_lat ) ) ) ) AS distance'
    )
->from('tt_address')

Это приводит к полностью неработающему запросу SQL:

SELECT `tt_address`.*,
`( 6371`.`41 * acos( cos( radians(48.0818583) ) * cos( radians(tt_address`.`tx_geosearch_lat ) ) * cos( radians(tt_address`.`tx_geosearch_lng ) - radians(11.9879884) ) + sin( radians(48.0818583) ) * sin( radians(tt_address`.`tx_geosearch_lat ) ) ) )` AS `distance`
FROM `tt_address`

Есть какие-нибудь указатели, как решить эту проблему?

1 Ответ

0 голосов
/ 30 августа 2018

Я не уверен, возможно ли это с помощью построителя запросов. Тем не менее я бы сделал это с подключением:

$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName);
$row = $connection->executeQuery('select * from ' . $tableName . ' where uid = 1')->fetchAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...