Я создаю фильтр для некоторых списков с разбивкой по страницам, и я хочу показать элементы, созданные между двумя датами. Но я не уверен, как это сделать правильно.
Вид:
<?php echo $this->Form->create('Logs');?> <fieldset> <?php echo $this->Form->input('start',array('type'=>'date')); echo $this->Form->input('end',array('type'=>'date')); ?> </fieldset> <?php echo $this->Form->end('Filter');?>
Контроллер:
... $conditions['Logs.created BETWEEN ? AND ?'] = array( $this->data['Logs']['start'],$this->data['Logs']['end']); ...
проблема в том, что $this->data['Logs']['start']
и $this->data['Logs']['end']
являются массивами, и мне нужны строки:
[Logs] => Array ( [start] => Array ( [month] => 04 [day] => 19 [year] => 2011 ) [end] => Array ( [month] => 04 [day] => 19 [year] => 2011 ) )
Я знаю, что я мог бы использовать некоторые функции php для преобразования массива в строку, но в торте должна быть какая-то функция или что-то в этом роде. Я чувствую, что я не правильно создаю представление
Спасибо за вашу помощь.
Думаю, лучшим выбором для вас было бы написать свою собственную вспомогательную функцию и вызвать ее в вашем контроллере.
В этом разделе рассказывается о том, как создать своего помощника: как лучше всего преобразовать данные формы выбора даты CakePHP в объект PHP DateTime?
Вы можете загрузить его в контроллер таким образом
App::import('Helper', 'DateHelper'); $dateHelper = new DateHelper();
Кроме того, почему бы просто не переключиться на обычный ввод текста и, возможно, JS datepicker? Это позволит решить ваши проблемы, не прибегая к вспомогательному маршруту. Тем не менее, вы потеряете доступность выпадающего списка.
вы можете использовать помощник времени, и это функция daysAsSql
daysAsSql( $begin, $end, $fieldName, $userOffset = NULL )
daysAsSql возвращает строку в формате "($ field_name> = '2008-01-21 00:00:00') AND ($ field_name <= '2008-01-25 23:59:59')". Это удобно, если вам нужно искать записи между двумя датами включительно.
См. Помощник времени