Формула хаверсина в полях разбивки на страницы CakePHP 2.0 не работает

Это мой первый пост на этом сайте, так что будьте любезны.

У меня нет проблем с выполнением этой работы с помощью метода find (), но когда я пытаюсь запустить его с помощью компонента paginate, мне не повезло. Я просто пытаюсь запустить формулу Хаверсина в параметрах полей для расчета расстояния. В «Книге тортов» написано: «Вы также можете включить другие параметры 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 _3 _._ 4_ AS Rides inner JOIN _6 _._ 7_ AS RideTypes ON (_9 _._ 10_ = _11 _._ 12_) WHERE 1 = 1 GROUP BY _13 _._ 14_ HAVING distance ‹5

Опять же, если я применяю все эти же самые параметры к методу find ('all'), он работает отлично, поэтому я знаю, что логика верна ... или, по крайней мере, работоспособна.

и так, что здесь происходит?


person daniel l    schedule 25.06.2012    source источник
comment
Вы пробовали добавлять к имени таблицы префиксы "расстояние", "время_поездки" и т. Д.? Например. ИМЕЕТ Rides.distance ‹$ filter_radius И Rides.ride_time› = ...   -  person joshua.paling    schedule 26.06.2012


Ответы (2)


Дэниел, возможно, у этого поста есть ответ, хотя он основан на CakePHP 1.3. Он включает привязку моделей на основе агрегирования.

http://cakephp.1045679.n5.nabble.com/Pagination-with-HasMany-and-SQL-Aggregation-td1307450.html

person Leo    schedule 25.06.2012

Похоже, у вас может быть проблема с названием вашей модели. Если ваше приложение следует правильным соглашениям CakePHP, вам следует использовать Ride.field вместо Rides.Field. В запросах CakePHP вы хотите ссылаться на Модель, а не на имя таблицы.

person CakePHPaul    schedule 17.10.2013