I'd like to paginate using a Circular query on MySQL, namely this:
SELECT *,
(
6371 * acos(
cos( radians( $lat ) ) * cos( radians( lat ) )
* cos( radians( lng )
- radians($lng)
)
+ sin( radians($lat)
) * sin( radians( lat ) ) ) ) AS distance
FROM {$this->table} HAVING distance < $dist
ORDER BY distance LIMIT $offset , $limit;
Unfortunately, I see the Pagination component only works through some query builder.
Is there a way I can use this query in a pagination anyway?
So, it turns out you can add virtual fields after the class declaration, like so:
public function addDistanceVirtualField($lng, $lat) {
$this->virtualFields['distance'] = <<<EOT
(
6371 * acos(
cos( radians( $lat) ) * cos( radians( {$Model->alias}.lat ) )
* cos( radians( {$Model->alias}.lng )
- radians($lng)
)
+ sin( radians($lat)
) * sin( radians( {$Model->alias}.lat ) ) ) )
EOT;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.