Как использовать оператор BETWEEN mysql с методом postCondition?

Я новичок в cakePHP, и мне нужно использовать метод controller::postConditions с оператором BETWEEN, но я не могу понять, как это сделать.

Я попробовал этот синтаксис, как я прочитал в документации controller::find:

$this->postConditions($this->data, array('Client.client_date_inscription BETWEEN ? AND ?'=>array($this->data['Client']['client_date_inscriptionD'],$this->data['Client']['client_date_inscriptionF'])))

ввод формы создается так:

echo $form->input('Client.client_date_inscriptionD',array('label'=>false,'type'=>'text','class'=>'toDatePicker'));

но это выдает эту ошибку:

SQL Error: 1054: Unknown column 'Client.client_date_inscriptionD' in 'where clause' 

Итак, мой вопрос: как вы используете оператор BETWEEN с postConditions?


person Camille Hodoul    schedule 14.12.2011    source источник


Ответы (2)


@boobyWomack Я изменил заглавные буквы D и F, это то, что я пробовал случайным образом.

Я пробовал много вещей и рылся в поваренной книге, чтобы найти ответ. На самом деле я нашел, как это сделать случайно, а не в документе postConditions.

Вот вызов postConditions:

 $this->postConditions($this->data, array('Client.client_nom' => 'LIKE', 'Client.client_prenom' => 'LIKE', 'Client.client_email' => 'LIKE','Client.client_date_inscription'=>'BETWEEN ? AND ?'))

Однако ввод Client.client_date_inscription в представлении должен предоставить массив из 2 значений. Я сделал это с синтаксисом, который нашел в поваренной книге:

$form->input('Client.client_date_inscription.0',array('label'=>false,'type'=>'text','class'=>'toDatePicker'))
$form->input('Client.client_date_inscription.1',array('label'=>false,'type'=>'text','class'=>'toDatePicker'))

Другой способ — вручную изменить значение $this->data['Client']['client_date_inscription'] в контроллере, но в моем случае это не имело значения.

Надеюсь, это поможет кому-нибудь с той же проблемой, так как это не очень ясно ни в поваренной книге, ни в API.

person Camille Hodoul    schedule 15.12.2011
comment
В некотором смысле кажется неясным, чтобы торт использовал этот синтаксис почти в стиле SaveAll в контексте поиска - я бы не догадался, что это будет именно так, - но это также довольно изящно, так что спасибо разработчикам торта еще раз за предоставление удобного метода :-) - person Luke Barker; 19.12.2011

привет, в вашей колонке действительно есть заглавная D и заглавная F в конце? Я бы изменил это, если бы вы могли! Кажется, это не соответствует правилам именования тортов.

при этом очевидно, что эти имена можно использовать с Cake.

Я думаю, вам следует сначала попытаться получить правильный запрос с помощью обычного поиска из Cake. Метод PostCondtions на самом деле является расширенной функцией быстрого доступа, и в этом случае может быть лучше попытаться заставить его работать в стандартном режиме. найти способ.

затем вы можете использовать отладочный вывод SQL из обычного find(), чтобы увидеть, где он отличается от PostCondtions. Может быть, это поможет.

Я также заметил, что синтаксис в документах для PostConditions намекает на что-то вроде «referrer» => «BETWEEN» (параметры массива необходимы в основном — так что читайте API или актуальную документацию для функции, и вы можете найти там нужный вариант!)

Кто-то в IRC может знать что-то неясное вроде этого — вы пробовали там?

удачи, пожалуйста, отпишитесь, если найдете ответ, который я хотел бы знать :)

person Luke Barker    schedule 14.12.2011
comment
Привет, я нашел ответ, я разместил его, если вам интересно. Кстати, спасибо за вашу помощь! - person Camille Hodoul; 15.12.2011
comment
эй, молодец, ты мог бы отметить меня, по крайней мере, за мое предложение использовать обычный метод, так как я думаю, что это был случай научиться ходить, прежде чем научиться бегать :) кстати, хорошо, что ты его нашел! - person Luke Barker; 19.12.2011
comment
Извините, но я думаю, что раньше у меня не было прав, чтобы проголосовать за ваш комментарий (может быть, недостаточно очков репутации?), Теперь это сделано :) еще раз спасибо. - person Camille Hodoul; 27.12.2011