我在varchar字段中保存日期值有些问题。 我试图将输入日期(如17/06/2015)转换为Time实例,然后将其存储在我的数据库中,如2015-06-17
这里是我要保存的实体的例子
(int) 1 => object(App\Model\Entity\Valeur) {
'new' => true,
'accessible' => [
'*' => true
],
'properties' => [
'caracteristique_id' => (int) 51,
'caracteristique' => object(App\Model\Entity\Caracteristique) {
'new' => true,
'accessible' => [
'*' => true
],
'properties' => [
'id' => (int) 51,
'type' => 'Date'
],
'dirty' => [
'id' => true,
'type' => true
],
'original' => [],
'virtual' => [],
'errors' => [],
'repository' => 'Caracteristiques'
},
'valeur' => object(Cake\I18n\Time) {
'time' => '2015-06-03T10:28:53+0000',
'timezone' => 'UTC',
'fixedNowTime' => false
}
],
'dirty' => [
'caracteristique_id' => true,
'caracteristique' => true,
'valeur' => true
],
'original' => [],
'virtual' => [],
'errors' => [],
'repository' => 'Valeurs'
},
保存后,我的数据库中只有17/06/2015
答案 0 :(得分:1)
我只是在视图中使用它时保存为日期时间和格式,但你可以做的是在保存之前(在beforeSave或在Controller /模型中)改变值以匹配你想要的任何日期
假设您的实体名为valeur,而您存储日期的字段也是valeur:
$valeur->valeur = $valeur->valeur->format('Y-m-d');
答案 1 :(得分:0)
我在时间戳行为中找到了答案,所以我在我的实体中做到了:
protected function _setValeur($valeur)
{
if (isset($this->caracteristique)) {
if ($this->caracteristique->isDate()) {
try {
if (!($valeur instanceof Time)) {
$valeur = Time::createFromFormat('d/m/Y', $valeur);
}
return $valeur->format('Y-m-d');
} catch (\InvalidArgumentException $e) {
return null;
}
}
}
if (empty($valeur)) {
$valeur = null;
}
return $valeur;
}
protected function _getValeur($valeur)
{
if (isset($this->caracteristique)) {
if ($this->caracteristique->isDate()) {
try {
return Time::createFromFormat('Y-m-d', $valeur);
} catch (\InvalidArgumentException $e) {
return null;
}
}
}
return $valeur;
}
protected function _getDate()
{
if (isset($this->caracteristique)) {
if ($this->caracteristique->isDate()) {
return !is_null($this->valeur) ?
$this->valeur->format('d/m/Y') : $this->valeur;
}
}
return null;
}
字段valeur是由特征关联动态引用的类型,所以即使在我的数据库中,valeur的字段是app中的varchar,它也可以是日期,字符串或数字。
在这种情况下,我测试类型,然后我只是在find上检索Time对象,并设置为日期字符串,格式为' d / m / Y'当我拯救。
我还创建了一个虚拟属性,为我提供了格式化日期