【问题标题】:Laravel Nova - Data missing on save a new registerLaravel Nova - 保存新寄存器时数据丢失
【发布时间】:2019-08-31 02:59:24
【问题描述】:

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

我使用的是 SQLServer,字段是日期时间格式,例如“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
  }
]

【问题讨论】:

    标签: laravel laravel-nova


    【解决方案1】:

    尝试将日期转换为 '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',
    ];
    

    【讨论】:

      【解决方案2】:

      我在使用 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 2020-11-30
        • 1970-01-01
        相关资源
        最近更新 更多