Фильтровать даты.Cakephp возвращает массив вместо даты, это нормально? - PullRequest
2 голосов
/ 19 апреля 2011

Я создаю фильтр для некоторых разбитых на страницы списков и хочу, чтобы я мог показывать элементы, созданные между двумя датами. Но я не уверен, как это сделать правильно.

Вид:

<?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-функции для преобразования массива в строку, но там должна быть какая-то функция или что-то в торте. Я чувствую, что не правильно строю представление

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2011

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

В этой теме рассказывается о том, как создать помощника: Как лучше всего преобразовать данные формы выбора даты CakePHP в объект PHP DateTime?

Вы можете загрузить его в контроллервот так

App::import('Helper', 'DateHelper');
$dateHelper = new DateHelper();

Кроме того, почему бы просто не переключиться на обычный ввод текста и, возможно, JS DatePicker?Это решит ваши проблемы без необходимости прибегать к вспомогательному маршруту.Вы потеряли бы доступность выпадающего списка.

0 голосов
/ 19 апреля 2011

вы можете использовать помощник по времени, и это функция 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' )». Это удобно, если вам нужно искать записи между двумя датами включительно. </p>

См. Помощник времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...