CakePHP: дата Поиска от помощника формы

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

Моя точка зрения:

<?php echo $this->Form->input('collect_date', array('label' => 'Collect Date','type'=>'date','dateFormat'=> 'DMY','minYear' => date('Y'),'maxYear' => date('Y')+1));?>

Мой диспетчер

$status =array(0,2,4);
$find_date = $this->data['Transaction']['collect_date'];
$field = array('Transaction.status','Catalogue.title', 'Catalogue.author', 'Catalogue.isbn', 'Location.rack');
$condition = array('OR' => array('AND' =>array('Transaction.return_date <'=> $find_date,'Transaction.status '=> '3'),array('Transaction.status'=> $status)));
$data = $this->Catalogue->Transaction->find('count',array('fields' => $field,'conditions'=>$condition,'order'=>array('Transaction.id desc') )); 
$this->set('Found', $data);

И свалка sql

SELECT COUNT(*) AS [count] FROM [transactions] AS [Transaction]
LEFT JOIN [catalogues] AS [Catalogue] ON ([Transaction].[catalogue_id] = [Catalogue].[id]) 
LEFT JOIN [users] AS [User] ON ([Transaction].[user_id] = [User].[id]) 
WHERE (((([Transaction].[return_date] < ('01', '09', 2013)) 
AND ([Transaction].[status] = 3))) OR ([Transaction].[status] IN (0, 2, 4))) 

Поскольку вы видите формат даты ('01', '09', 2013). Но когда попытка преобразовать использует это

'Transaction.return_date <'=> date('Y-m-d', strtotime($find_date))

это показывает ошибку:

Warning (2): strtotime() expects parameter 1 to be string, array given [APP\Controller\CataloguesController.php, line 66]

и шоу sql:

[Transaction].[return_date] < '1970-01-01'
1
nl ja de

2 ответы

Вы могли использовать:

$date = DateTime::createFromFormat('d/m/y',  implode('/', $find_date));
'Transaction.return_date <'=> $date->format('Y-m-d');

Править:

Я думаю способ, с которым его предназначенный, который будет 'сглажен',

$this->Model->deconstruct('find_date', $find_date);

However, last time i tried to use this, i couldn't get it to work properly, so i went with the above. http://api21.cakephp.org/class/model#method-Modeldeconstruct

0
добавлено
@Eion: Я сделал PR, чтобы использовать вскрытие противоречия, как вы предполагаете: github.com/cakephp/cakephp/pull/842 - но другой не вполне любил его;) Так или иначе, чтобы сделать вскрывают противоречия в работе здесь, необходимо было бы добавить область к схеме модели.
добавлено автор mark, источник
хорошо, мой PR был и методом и большим количеством автоволшебства. возможно, если его единственное метод это могло бы стоить добавить к ядру?
добавлено автор mark, источник
Мне понравилось, когда идея просто наличия метода использовала, вскрывают противоречия в нем. I' m использование атм монго и меня don' t как идея необходимости определить мою схему, так как это вмешивается в то, что будет спасено и разрушает часть mongos гибкости.
добавлено автор Eoin Murphy, источник
Вероятно, если это было добавлено к CakeTime? CakeTime:: вскройте противоречия ($format, $array), Так как помощник формы делает его тем путем, должен определенно быть способ извлечь его
добавлено автор Eoin Murphy, источник

Попытайтесь преобразовать дату возвращения, используя UNIX_TIMESTAMP в запросе SQL и затем сравнив его с strtotime ($find_date).

0
добавлено