我在数据库中有一个时间戳,想要将其保存。但我无法成功,出现了两个问题:一是MySQL
时间戳为空,二是出现了错误。所发布的格式是英国标准。
在发布数据时,我尝试了以下方法:
$user['crb_date'] = Carbon::createFromFormat('d/m/Y', $data['crb_date']);
$user['crb_date'] = Carbon::createFromFormat('d/m/Y', $data['crb_date'])->toDateTimeString();
// Plus many other more std date(), strtodate() combos
在我的模型中,我有自定义的getDates方法,它将把日期转换为Carbon格式:
public function getDates()
{
return [
'last_login',
'created_at',
'updated_at',
'dob',
'crb_date'
];
}
现在,如果我用Carbon日期更新用户,会出现以下问题:
意外发现数据。意外发现数据。数据丢失。
但是,如果我在第二次Carbon日期转换后使用
dd($user['crb_date']
,我得到了以下结果:字符串'2011-05-01 11:20:23'(长度=19)
这看起来非常好。
如果我删除模型上的访问器,则可以发布它,但是我会得到空白时间戳
0000-00-00 00:00:00
我还尝试在模型上放置一个修改器来设置日期,但问题完全相同。有什么想法可以让它工作?我认为这可能与访问器引起的问题有关,但之后需要更好地处理这些日期。
非常感谢您抽出时间帮助。
这是我尝试过的修改器——它被设置在模型上。但是,上面的代码(Carbon::createFormFormat...)目前在我的repo中。
public function setCrbDateAttribute($value)
{
$this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
访问器(Accessor):
public function getDates()
{
return [
'last_login',
'created_at',
'updated_at',
'dob',
'crb_date'
];
}
已排序!
感谢下面WereWolf的回答,我调整了模型变异器,现在它像魔法一样运作良好。这是我现在拥有的:
public function setCrbDateAttribute($value)
{
$this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d/m/Y', $value)->toDateTimeString();
}
getDates()
中删除你的日期属性还是从getFooAttribute()
中删除? - JofryHSaccessor
方法在哪里? - The AlphagetCreatedAtAttribute
这样的访问器方法? - The Alpha