-1

我使用表单助手来显示下拉选择日期。我的问题是,我无法将 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'
4

2 回答 2

0

你可以使用:

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

编辑:

我认为它意味着“扁平化”的方式是

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

但是,上次我尝试使用它时,我无法让它正常工作,所以我选择了上面的方法。 http://api21.cakephp.org/class/model#method-Modeldeconstruct

于 2013-01-09T16:07:54.353 回答
0

尝试在 sql 查询中使用 UNIX_TIMESTAMP 转换返回日期,然后将其与 strtotime($find_date) 进行比较。

于 2013-01-10T12:15:53.820 回答