MySQL中的CakePHP错误日期
我在MySQL中的一个表中有一个名为issue_date的字段,它是datetime类型,我改为date 当我试图将日期保存到数据库时,使用MySQL中的CakePHP错误日期,php,mysql,cakephp,cakephp-3.0,Php,Mysql,Cakephp,Cakephp 3.0,我在MySQL中的一个表中有一个名为issue_date的字段,它是datetime类型,我改为date 当我试图将日期保存到数据库时,使用 奇怪的年份(例如2196年),当实际日期为2003年时,我在保存对象之前对其进行了输出,并显示了实际日期(2003-06-30) 该字段为issue\u date 这是我保存的功能: public function populate(){ $this->tangoModel=$this->loadModel('Tango');
奇怪的年份(例如2196年),当实际日期为2003年时,我在保存对象之前对其进行了输出,并显示了实际日期(2003-06-30) 该字段为
issue\u date
这是我保存的功能:
public function populate(){
$this->tangoModel=$this->loadModel('Tango');
$tango=$this->tangoModel->getInvoices();
$this->obrasModel=$this->loadModel('Obras');
$obras=$this->obrasModel->getObras();
foreach($tango as $invoice){
$data[] = ([
'issue_date' => date('Y-m-d', strtotime($invoice['issue_date'])),
'type' => $invoice['type']
]
);
}
print_r($data);
$invoices = $this->Invoices->newEntities($data);
foreach($invoices as $invoice){
if ($this->Invoices->save($invoice)) {
$this->Flash->success(__('The invoice has been saved.'));
};
}
}
这是数据数组的一个对象的输出:
[0] => Array
(
[issue_date] => 2003-06-30,
[type] => CRE
)
这是如何插入MySQL的输出
[{"id":"1",
"issue_date":"2196-11-06",
"type":"CRE"
}]
这是在/Model/Table
中的InvoicesTable文件中验证字段的方式:
public function validationDefault(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->allowEmpty('id', 'create');
$validator
->add('issue_date', 'valid', ['rule' => 'date'])
->allowEmpty('issue_date');
$validator
->allowEmpty('type');
return $validator;
}
}
这是/Model/entity
/**
* Invoice Entity.
*
* @property int $id
* @property \Cake\I18n\Time $issue_date
* @property string $type
*/
class Invoice extends Entity
{
/**
* Fields that can be mass assigned using newEntity() or patchEntity().
*
* Note that when '*' is set to true, this allows all unspecified fields to
* be mass assigned. For security purposes, it is advised to set '*' to false
* (or remove it), and explicitly make individual fields accessible as needed.
*
* @var array
*/
protected $_accessible = [
'*' => true,
'id' => false,
];
}
谢谢它在控制器中添加了以下内容:
use Cake\Database\Type;
Type::build('date')->setLocaleFormat('yyyy-MM-dd');
多亏了ndm,它在控制器中添加了以下内容:
use Cake\Database\Type;
Type::build('date')->setLocaleFormat('yyyy-MM-dd');
多亏了ndm将列的类型从
datetime
更改为date
之后,您是否清除了CakePHP缓存?这是更改数据库结构后出现奇怪错误时要检查的第一件事。是的,我已经删除了/tmp/cachehow中的所有内容,即mysql输出的“2196-11-06”。你说字段是datetime?现在字段是Date,最初,当我使用CakePHP烘焙表时,它是datetime什么是intl.default\u locale
设置的?您是否使用过DateTimeType::setLocaleFormat()
或Time::setToStringFormat()
?这可能很有趣:将列的类型从datetime
更改为date
后,是否清除了CakePHP缓存?这是更改数据库结构后出现奇怪错误时要检查的第一件事。是的,我已经删除了/tmp/cachehow中的所有内容,即mysql输出的“2196-11-06”。你说字段是datetime?现在字段是Date,最初,当我使用CakePHP烘焙表时,它是datetime什么是intl.default\u locale
设置的?您是否使用过DateTimeType::setLocaleFormat()
或Time::setToStringFormat()
?这可能很有趣:我建议不要在控制器中这样做(而是在引导中),除非它真的应该只应用于那个特定的控制器!我建议不要在控制器中这样做(而是在引导中),除非它实际上只应用于特定的控制器!