手动转换类型实例中的输入参数
manually convert input parameters in type instance
我在将日期值保存在 varchar 字段中时遇到了一些问题。
我正在尝试将输入日期(如 17/06/2015)转换为时间实例,然后将其作为 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
在视图中使用它时,我只是将其保存为日期时间和格式,但您可以做的是在保存之前(在 beforeSave 或 Controller/model 中)更改值以匹配任何日期你要
假设您的实体名为 valeur,并且您存储日期的字段也是 valeur:
$valeur->valeur = $valeur->valeur->format('Y-m-d');
好吧,我在时间戳行为中找到了答案,所以我在我的实体中这样做了:
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 的字段在应用程序中是一个 varchar,它可以是日期、字符串或数字。
在这种情况下,我测试了类型,然后在查找时检索了 Time 对象,并在保存时将日期字符串设置为 'd/m/Y' 格式。
我还创建了一个虚拟 属性,它给我格式化的日期
我在将日期值保存在 varchar 字段中时遇到了一些问题。 我正在尝试将输入日期(如 17/06/2015)转换为时间实例,然后将其作为 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
在视图中使用它时,我只是将其保存为日期时间和格式,但您可以做的是在保存之前(在 beforeSave 或 Controller/model 中)更改值以匹配任何日期你要
假设您的实体名为 valeur,并且您存储日期的字段也是 valeur:
$valeur->valeur = $valeur->valeur->format('Y-m-d');
好吧,我在时间戳行为中找到了答案,所以我在我的实体中这样做了:
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 的字段在应用程序中是一个 varchar,它可以是日期、字符串或数字。
在这种情况下,我测试了类型,然后在查找时检索了 Time 对象,并在保存时将日期字符串设置为 'd/m/Y' 格式。
我还创建了一个虚拟 属性,它给我格式化的日期