CakePHP: Как я могу использовать операцию «HAVING» при построении запросов с помощью метода поиска?

Я пытаюсь использовать предложение HAVING в запросе SQL с помощью метода CakePHP paginate ().

После некоторых поисков выяснилось, что этого нельзя достичь с помощью методов Cake paginate () / find ().

Код, который у меня есть, выглядит примерно так:

$this->paginate = array(
        'fields' => $fields,
        'conditions' => $conditions,
        'recursive' => 1,
        'limit' => 10, 
        'order' => $order,
        'group' => 'Venue.id');

Одно из полей $ - это псевдоним «расстояние». Я хочу добавить запрос, когда расстояние <25 (например, ИМЕЕТ расстояние <25).

Я видел два обходных пути, к сожалению, ни один из которых не подходит для моих нужд. Я видел два:

1) Добавление предложения HAVING в опции «group». например 'group' => 'Venue.id ИМЕЕТ расстояние <25' . Похоже, что это не работает при использовании в сочетании с разбивкой на страницы, поскольку это нарушает начальный запрос подсчета, который выполняется. (т.е. пытается ВЫБРАТЬ отдельный (Venue.id HAVING distance <25) , что явно недопустимый синтаксис.

2) Добавление предложения HAVING после условия WHERE (например, WHERE 1 = 1 HAVING field> 25 ) Это не работает, поскольку кажется, что предложение HAVING должно стоять после оператора group, который Cake помещает после условия WHERE в генерируемом им запросе.

Кто-нибудь знает, как это сделать с помощью метода find () CakePHP? Я не хочу использовать query (), так как это потребует много переделок, а также означает, что мне нужно будет реализовать свою собственную логику разбиения на страницы!

Заранее спасибо

20
задан Álvaro González 3 October 2018 в 11:41
поделиться