Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩的模型创建过程中出错-执行了mutator,但insert语句中不存在mutated Date字段-Laravel 5.4_Php_Mysql_Laravel 5_Eloquent_Php Carbon - Fatal编程技术网

Php 雄辩的模型创建过程中出错-执行了mutator,但insert语句中不存在mutated Date字段-Laravel 5.4

Php 雄辩的模型创建过程中出错-执行了mutator,但insert语句中不存在mutated Date字段-Laravel 5.4,php,mysql,laravel-5,eloquent,php-carbon,Php,Mysql,Laravel 5,Eloquent,Php Carbon,mySQL日期格式为Y-m-d 出于本地化原因,用户以d-m-Y格式向my Laravel 5.4应用程序提交日期字段,这些字段保存到mySQL中的detenutodal字段中 在我的Attore模型中,我使用了mutators来转换这两种格式,如下所示 <?php namespace App; //use Illuminate\Database\Eloquent\Model; use Carbon\Carbon; class Attore extends Model { p

mySQL日期格式为
Y-m-d
出于本地化原因,用户以
d-m-Y
格式向my 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字段已正确验证,我确信该mutator在调用时被称为I
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抱怨
detenutodal
没有默认值,因为
detenutodal
已从查询中完全消失,而我希望mutator在调用
Attore::create
之前正确更新字段并将其添加到查询中

有人能解释一下吗


感谢

detenutodal字段为空,并且在mysql引擎中没有默认值。请首先从控制器转储detenutodal字段开始,检查它是否有值,然后检查值是否为datetime值。

您没有显式允许“填充”detenutodal字段

默认情况下,Laravel有一个针对

这应该可以解决它

protected $fillable = ['detenutodal'];

编辑:你的变异体是错误的

public function setDetenutodalAttribute($value)
{
    $this->attributes['detenutodal'] = Carbon::parse($value)->format('Y-m-d');
}
您需要设置可填充属性

protected $fillable = ['detenutodal'];
或是让被守卫的人这么做

protected $guarded = [];

您允许日期的值为null,这个字段可以为null吗?

我已经在Attore的超类中声明了$guarded属性<代码>类模型扩展了雄辩的{//protected$guarded=['id'、'created_at'、'updated_at'、'deleted_at'、];}如果不使用mutators,插入工作它有一个值,它通过验证并进行了变异,但它没有被包括在查询中,这是很清楚的,添加如下几行调试代码:公共函数setDetenutodalAttribute($value){echo$value;echo'
';dd(Carbon::parse($value)->format('Y-m-d');使用表单30-06-1943的输入,我得到这个输出30-06-1943“1943-06-30”因此,验证程序通过,并调用了mutator。但是插入时不考虑该值。此
$this->attributes['detenutodal']
是解决方案。我们在错误的位置查找问题,而不是在严重的复制粘贴错误中…谢谢
protected $guarded = [];