Laravel Nova-保存新寄存器时缺少数据

时间:2019-04-09 18:35:13

标签: laravel laravel-nova

我的模型中有一些日期时间字段,当我尝试保存新的寄存器时,可以正常工作,但是当我为日期设置$ casts属性时(因为laravel nova需要它),我可以保存新的寄存器,显示在数据库中,但返回以下错误,并且不重定向到索引页面。

我正在使用SQLServer,这些字段的格式为datetime,例如“ Y-m-d H:i:s.000”

"message": "Data missing",
    "exception": "InvalidArgumentException",
    "file": "/var/www/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php",
    "line": 537,

我为$ cast尝试了所有日期格式,但没有用,我尝试设置$ dateFormat = Ymd H:i:s或Ymd H:i:s.000或Ymd H:i:su或Ymd H:i:sv无效。

//My Model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;

class QuickQuiz extends Model
{
    use SoftDeletes;

    /*
    |--------------------------------------------------------------------------
    | Attributes
    |--------------------------------------------------------------------------
    */

    protected $guarded = ['id'];

    protected $casts = [
        'start_date' => 'datetime:Y-m-d H:i:s',
        'end_date' => 'datetime:Y-m-d H:i:s',
        'draw_date' => 'datetime:Y-m-d H:i:s',
    ];

    /*
    |--------------------------------------------------------------------------
    | Boot
    |--------------------------------------------------------------------------
    */
    public static function boot()
    {
        parent::boot();

        static::creating(function ($quickQuiz) {

            $quickQuiz->uuid = Str::uuid();
            $quickQuiz->status_id = Status::pendent();

            $quickQuiz->created_user_id = auth()->user()->id;
            $quickQuiz->updated_user_id = auth()->user()->id;

        });

        static::updating(function ($quickQuiz) {
            $quickQuiz->updated_user_id = auth()->user()->id;

        });
    }

    /*
    |--------------------------------------------------------------------------
    | Relationships
    |--------------------------------------------------------------------------
    |
    */

    public function questions()
    {
        return $this->hasMany(QuickQuizQuestion::class);
    }

    public function createdUser()
    {
        return $this->belongsTo(User::class, 'created_user_id', 'id');
    }

    public function updatedUser()
    {
        return $this->belongsTo(User::class, 'updated_user_id', 'id');
    }
}
//Example of register

[
  {
    "id": 47,
    "uuid": "f8c70e31-5a49-4587-aabe-e08286060e62",
    "title": "Nunc iaculis posuere nibh, a vehicula arcu malesuada eget.",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tortor dolor, interdum at nunc et, congue iaculis felis. Nulla ultrices lorem a ex sagittis tempor. Morbi lacinia ante mi. Quisque feugiat lectus eget nisi bibendum faucibus. Vivamus ex quam, convallis eu elit vitae, cursus lobortis diam. Nullam vel placerat ex, eget lacinia mi. Nulla lorem tortor, tincidunt eu scelerisque vel, faucibus semper lacus. Nulla ut felis eget ipsum blandit elementum lacinia id mi. Maecenas imperdiet non felis a tincidunt. Pellentesque tempus tincidunt enim sed fermentum. Nunc iaculis posuere nibh, a vehicula arcu malesuada eget.",
    "start_date": "2019-04-18 09:15:15.000",
    "end_date": "2019-04-30 17:15:15.000",
    "max_response_time": 45,
    "status_id": 5,
    "winner_clerk_id": null,
    "prize_value": 111.11,
    "draw_date": null,
    "created_user_id": 1,
    "updated_user_id": 1,
    "created_at": "2019-04-09 14:56:08.497",
    "updated_at": "2019-04-09 14:56:08.497",
    "deleted_at": null
  }
]

2 个答案:

答案 0 :(得分:0)

尝试像这样将日期强制转换为'Y-m-d H:i:s.u0':

protected $casts = [
   'start_date' => 'datetime:Y-m-d H:i:s.u0',
   'end_date' => 'datetime:Y-m-d H:i:s.u0',
   'draw_date' => 'datetime:Y-m-d H:i:s.u0',
];

答案 1 :(得分:0)

我在使用 SQLServer 时遇到了同样的问题。 尝试在您的模型中定义 mutators for these attributes

/**
 * @var string
 */
protected $dateFormat = 'Y-m-d H:i:s.v';

/**
 * @param $value
 */
public function setStartDateAttribute($value)
{
    $this->attributes['start_date'] = null !== $value ? date($this->dateFormat, strtotime($value)) : null;
}

/**
 * @param $value
 */
public function setEndDateAttribute($value)
{
    $this->attributes['end_date'] = null !== $value ? date($this->dateFormat, strtotime($value)) : null;
}

/**
 * @param $value
 */
public function setDrawDateAttribute($value)
{
    $this->attributes['draw_date'] = null !== $value ? date($this->dateFormat, strtotime($value)) : null;
}