2016-11-29 36 views
3

我有在一个datepicker被选中在以下格式的日期Laravel在保存到数据库之前改变日期?

​​

因此,使用AM/PM,它显示在我的输入字段,这是正确的以下

enter image description here

当我提交表单时,Laravel不会更新记录,因为我的DATETIME字段在MySQL中未知。

我的“日期”字段添加到$日期排列,所以应该由Laravel

我用我的如下型号赋值函数试图解析,但没有成功

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = Carbon::createFromFormat('Y-m-d g:i A', $value)->format('Y-m-d H:i:s'); 
} 

原始值未被更新。 任何想法我可能做错了什么?

谢谢

+0

当您提交表单时,是否通过anny错误? –

+0

不!它只是不更新​​我的数据库中的值 – Notflip

回答

1

Laravel的日期突变希望像'Y-m-d H:i:s'的格式,但你可以使用你的模型$dateFormat属性来指定不同的格式。例如:

protected $dateFormat = 'Y-m-d g:i A'; 

检查出的文档的日期格式部分下Date Mutators

或者,您也可以解析使用碳模型之外的日期,因为在$dates列出的属性也将接受碳实例:

$model->date = Carbon::createFromFormat('Y-m-d g:i A', '2016-11-29 02:00 PM'); 

这是我通常使用的方法。对我来说,这更像是一个前端问题,您试图将用户友好的格式映射到您的模型/数据库期望的格式,所以我通常会将此逻辑放入控制器中。

+0

非常感谢!我对所有这些都感到困惑。使用默认值将其保存在数据库中显然是明显的,但是显示它却很明显,然后在控制器中重新转换它。 – Notflip

2

看看Laravel的date mutators,此处理访问和变异日期进入,并从数据库中为你喜欢它与created_at和其他默认日期一样。

基本上,你需要将date字段添加到$dates阵列上你的模型像这样:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The attributes that should be mutated to dates. 
    * 
    * @var array 
    */ 
    protected $dates = [ 
     'created_at', // Add if you're using timestamps on the model 
     'updated_at', // Add if you're using timestamps on the model 
     'deleted_at', // Add if you're using softDeletes on the model 
     'date' 
    ]; 
} 

这样当模型被保存到它这样做的DATETIME数据库中,而当它正在从数据库读入你的模型,它将是一个Carbon实例

+0

感谢您的回答,情况已经如此。我忘了将它添加到我的问题中,我现在将它添加。 – Notflip

1

看来你的碳功能是好的。但为什么它不工作,不明白。但我有使用PHP日期函数的解决方案。

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = date("Y-m-d H:i:s", strtotime($value); 
} 
相关问题