For coders TYPO3 Tech Corner

[PHP] Umkreissuche in TYPO3

[PHP] Umkreissuche in TYPO3

Hier ein Auszug aus einem möglichen Repository. In diesem Beispiel hat die Tabelle tx_any_domain_model_any mindestens die Spalten uid, latitude und longitude:

<?php declare(strict_types=1); namespace Vendor\Any\Domain\Repository; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; /** * Class AnyRepository */ class AnyRepository { const TABLE_NAME = 'tx_any_domain_model_any'; /** * @param float $latitude * @param float $longitude * @param int $distance * @return array * @throws \Doctrine\DBAL\Exception */ public function findByRadius(float $latitude, float $longitude, int $distance): array { $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable(self::TABLE_NAME); return (array)$connection->executeQuery($this->getSqlForRadialSearch($latitude, $longitude, $distance)); } /** * @param float $latitude * @param float $longitude * @param int $distance * @return string */ protected function getSqlForRadialSearch(float $latitude, float $longitude, int $distance): string { $sql = 'SELECT uid, latitude, longitude, ( 6371 * acos( cos( radians(' . $latitude . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $longitude . ') ) + sin( radians(' . $latitude . ') ) * sin( radians( latitude ) ) ) ) AS distance FROM ' . self::TABLE_NAME . ' HAVING distance <= ' . $distance . ' ORDER BY distance ASC;'; return $sql; } }

Zurück

Kennst du das: Immer nur schnell schnell?

Wie wäre es einmal mit Zeit und Respekt für Codequalität? Arbeiten im Team? Automatisierte Tests?

Komm zu uns