このサイトに投稿するのは初めてなので、よろしくお願いします。
find() メソッドを使用すると問題なく動作しますが、paginate コンポーネントを使用して実行しようとするとうまくいきません。フィールドオプションでHaversine式を実行して距離を計算しようとしています。Cake Book では、「fields などの他の 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 不明な列 'distance' in 'having clause'
SQL クエリ: SELECT COUNT(*) AS count
FROM velobuddies
. rides
ASRides
内部 JOIN velobuddies
。ride_types
AS RideTypes
ON ( RideTypes
. id
= Rides
. ride_type
) WHERE 1 = 1 GROUP BY Rides
. id
距離 < 5
繰り返しますが、これらすべてのまったく同じオプションを find('all') メソッドに適用すると、完全に機能するため、ロジックが正しいことがわかります...または少なくとも機能します。
それで、ここで何が起こっているのですか?