这是我在这个网站上的第一篇文章,所以请善待。
使用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'having子句'中未知列'距离'
SQL查询:SELECT COUNT(*)AS 同样,如果我将所有这些完全相同的选项应用于find('all')方法,它可以完美地工作,所以我知道逻辑是正确的......或者至少是可行的。 那么这里发生了什么?count
FROM velobuddies
。rides
AS Rides
内部加入velobuddies
。ride_types
AS { {1}} ON(RideTypes
。RideTypes
= id
。Rides
)WHERE 1 = 1 GROUP BY ride_type
。Rides
距离
答案 0 :(得分:0)
丹尼尔这篇文章可能有答案,尽管它基于CakePHP 1.3。它涉及基于聚合绑定模型。
http://cakephp.1045679.n5.nabble.com/Pagination-with-HasMany-and-SQL-Aggregation-td1307450.html
答案 1 :(得分:0)
您的型号名称可能存在问题。如果您的应用程序遵循正确的CakePHP约定,那么您应该使用Ride.field而不是Rides.Field。在CakePHP查询中,您要引用模型而不是表名。