这是我在这个网站上的第一篇文章,所以请多多关照。
使用 find() 方法完成这项工作没有任何问题,但是当我尝试使用 paginate 组件运行它时,没有运气。我只是想在字段选项中运行 Haversine 公式来计算距离。在 Cake Book 中,它说“您还可以包含其他 find() 选项,例如字段:”。没有提到任何警告。
所以,这就是我想要运行的:
$this->paginate = array(
'joins' => array(
array(
'table' => 'ride_types',
'alias' => 'RideTypes',
'type' => 'inner',
'conditions'=>array('RideTypes.id = Rides.ride_type')
)
),
'group' => array(
"Rides.id HAVING distance < $filter_radius AND ride_time >= '$filter_earliest_time' AND ride_time <= '$filter_latest_time' AND ride_date >= '$filter_earliest_date' AND ride_date <= '$filter_latest_date'"
),
'fields' => array(
"( 3959 * acos( cos( radians($filter_lat) ) * cos( radians( Rides.lat ) ) * cos( radians( Rides.lng ) - radians($filter_lng) ) + sin( radians($filter_lat) ) * sin( radians( Rides.lat ) ) ) ) AS distance"
),
'limit' => 5,
'page' => $paginate_page,
'order' => array('Rides.start_time DESC'),
);
$rides = $this->paginate('Rides',$options['conditions']);
我收到此错误:
错误:SQLSTATE [42S22]:未找到列:1054“有子句”中的未知列“距离”
SQL 查询: SELECT COUNT(*) AS count
FROM velobuddies
。rides
作为Rides
内部 JOIN velobuddies
。ride_types
AS RideTypes
ON ( RideTypes
. id
= Rides
. ride_type
) WHERE 1 = 1 GROUP BY Rides
。id
距离 < 5
同样,如果我将所有这些完全相同的选项应用于 find('all') 方法,它会完美运行,所以我知道逻辑是正确的......或者至少是可行的。
那么这里发生了什么?