mySQL日期格式是Y-m-d
出于本地化的原因,用户在d-m-Y表单中将日期字段提交给我的Laravel 5.4应用程序,并将其保存到mySQL中的detenutodal字段中。
在我的Attore模型中,我使用了mutators来转换这两种格式,如下所示。

<?php
namespace App;

//use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class Attore extends Model
{

    protected $dates = [
        'created_at',
        'updated_at',
        'deleted_at',
        'detenutodal'
    ];

    /**
     * detenutodal: DB Y-m-d => m-d-Y
     *
     * @param  date  $value
     * @return date
     */
    public function getDetenutodalAttribute($value)
    {
        return Carbon::parse($value)->format('d-m-Y');
    }

    /**
     * detenutodal: m-d-Y => DB Y-m-d
     *
     * @param  date  $value
     * @return date
     */
    public function setDetenutodalAttribute($value)
    {
        return Carbon::parse($value)->format('Y-m-d');
    }
}

如您所见,detenutodal属性被添加到$dates中,使其成为一个Carbon实例(不声明它似乎没有区别)。实际上,我不能让detenutodal像Carbon实例那样运行,我必须显式调用Carbon::parse
我在Attore中创建了一个新的AttoreController模型,如下所示:
$this->validate(request(), [
    'detenutodal' =>'nullable|date_format:"d-m-Y"',
    ]);

Attore::create(request()->all());

detenutodal字段已正确验证,我确信在调用它时调用了mutator。将正确的dd值传递给它-例如detenutodal并返回30-06-1943
但是1943-06-30失败,并出现以下错误:
SQLSTATE[HY000]: General error: 1364 Field 'detenutodal' doesn't have a default value (SQL: insert into `attores` (`nome`, `enteopersona`, `paternita`, `maternita`, `annonascita`, `luogonascita`, `residenza`, `professione`, `gradoistruzione`, `updated_at`, `created_at`) values (Aminto Pestalozzi, persona, Agenore Pestalozzi, Giacinta Tortelazzi, 1910, Caorso in Strà' lva', Via Morigi 4, Caorso, Bracciante, Scuola professionale, 2017-05-18 14:23:22, 2017-05-18 14:23:22))

如您所见,mySQL抱怨create没有默认值,因为detenutodal已经从查询中完全消失,而我希望mutator在调用detenutodal之前正确地更新了字段并将其添加到查询中。
有人能照一下吗?
谢谢

最佳答案

编辑:你的突变子错了。

public function setDetenutodalAttribute($value)
{
    $this->attributes['detenutodal'] = Carbon::parse($value)->format('Y-m-d');
}

您需要设置可填充属性。
protected $fillable = ['detenutodal'];

或者把守卫设成这样
protected $guarded = [];

允许日期为空值,此字段是否为空?

关于php - Eloquent 模型创建期间发生错误-mutator执行但在插入语句中不存在变异的Date字段-Laravel 5.4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44048040/

10-12 17:17