Mysql
 sql >> Datenbank >  >> RDS >> Mysql

CakePHP fragt den nächstgelegenen Längen- und Breitengrad aus der Datenbank ab

Es gibt keine virtualFields mehr in Kuchen 3, aber Sie können immer noch einen Alias ​​für Ihr berechnetes Feld erstellen

Wie von @ndm vorgeschlagen, binden Sie besser $latitude und $longitude um SQL-Injections zu verhindern

$distanceField = '(3959 * acos (cos ( radians(:latitude) )
    * cos( radians( Sightings.latitude ) )
    * cos( radians( Sightings.longitude )
    - radians(:longitude) )
    + sin ( radians(:latitude) )
    * sin( radians( Sightings.latitude ) )))';

mit wo

$sightings = $this->Sightings->find()
    ->select([
        'distance' => $distanceField
    ])
    ->where(["$distanceField < " => $distance])
    ->bind(':latitude', $latitude, 'float')
    ->bind(':longitude', $longitude, 'float')
    ->contain(['Photos', 'Tags']);

mit Haben

$sightings = $this->Sightings->find()
    ->select([
        'distance' => $distanceField
    ])
    ->having(['distance < ' => $distance])
    ->bind(':latitude', $latitude, 'float')
    ->bind(':longitude', $longitude, 'float')
    ->contain(['Photos', 'Tags']);