我希望对我在formatResults()
$users = $this->Users
->find('all')
->formatResults(function ($users) use ($lat, $lng) {
return $users->map(function ($user) use ($lat, $lng) {
$user->distance = getDist($lat, $lng);
return $user;
});
})
->order([
'distance' => 'ASC'
]);
[...]
$this->set('users', $this->paginate($users));
字段$user->distance
不在数据库中。
$user->distance
包含一个浮点数(getDist($lat, $lng);
),该浮点数可根据用户请求时的位置而变化。
->order([
'distance' => 'ASC'
]);
返回错误:Column not found: 1054 Unknown column 'Users.distance' in 'order clause'
我的问题是:我可以在接收用户信息时对动态创建的字段进行排序吗?
答案 0 :(得分:1)
您可以按照在php中计算的字段进行排序,但它不适用于分页,因为要进行排序,您需要来自数据库的所有记录。您需要创建一个在SQL中运行的等效逻辑,以便进行排序。
检查此插件,它可以帮助您计算距离并按他们排序https://github.com/dereuromark/cakephp-geo/
是find('distance')
自定义查找程序,您可以在使用提供的行为时动态添加到表中。 https://github.com/dereuromark/cakephp-geo/blob/master/src/Model/Behavior/GeocoderBehavior.php#L223