如何修复模型更新时的尾随数据错误

时间:2019-02-12 20:39:15

标签: php sql-server laravel

我已经为这个问题奋斗了数周,并且机智地结束了。从表面上看,这似乎是一个非常简单的解决方法,但是我尝试过的任何方法都没有起作用。我已经在Google上用尽了许多链接来解决这个问题。该错误发生在所有型号上,不仅发生在我的屏幕截图中,还出现在整个模型中。

以下是规格:

  • Laravel 5.7
  • Ubuntu 16.04
  • SQL Server 2016
  • ODBC驱动程序17
  • PHP 7.2.15

这是问题所在:

使用质量分配更新模型时,出现以下错误: InvalidArgumentException with message 'Trailing data'

这是我尝试过的方法:(多种组合)

  • 将$ dateFormat添加到我的模型中(同时尝试了“ Y-m-d H:i:s”和“ Y-m-d H:i:s.u”)
  • 为GET和SET的时间戳列(created_at,updated_at,deleted_at)添加了属性更改器
  • 将时间戳列添加到$ dates和$ casts

似乎问题出在“ .000”的尾随数据上,但是我的变种人不应该解决这个问题吗?另外,我尝试将日期格式更新为Y-m-d H:i:s.u,最后以“ .u”结尾,但是会产生以下错误: SQLSTATE[22007]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Conversion failed when converting date and/or time from character string. (SQL: update [programs] set [title] = New title, [updated_at] = 2019-02-12 15:27:40.000000 where [id] = 1)

这是我的模特:     

namespace App\Classes\Models;

use Illuminate\Database\Eloquent\Model;

class Program extends Model
{
    protected $dateFormat = 'Y-m-d H:i:s.u';

    protected $fillable = [
    'program_id',
    'user_id',
    'title',
    'westco_service_id',
    'allow_changes',
    ];

    protected $dates = [
        'deleted_at',
    ];

    public function getCreatedAtAttribute($value)
    {
        return date('Y-m-d H:i:s.u', strtotime($value));
    }

    public function getUpdatedAtAttribute($value)
    {
        return date('Y-m-d H:i:s.u', strtotime($value));
    }

    public function getDeletedAtAttribute($value)
    {
        return date('Y-m-d H:i:s.u', strtotime($value));
    }

    public function setCreatedAtAttribute($value)
    {
        $this->attributes['created_at'] = date('Y-m-d H:i:s.i', strtotime($value));
    }

    public function setUpdatedAtAttribute($value)
    {
        $this->attributes['updated_at'] = date('Y-m-d H:i:s.u', strtotime($value));
    }

    public function setDeletedAtAttribute($value)
    {
        $this->attributes['deleted_at'] = date('Y-m-d H:i:s.u', strtotime($value));
    }

    public function author()
    {
        return $this->belongsTo(User::class);
    }
}

这是我的修补会议: ` Justin Hileman撰写的Psy Shell v0.9.9(PHP 7.2.15-1 + ubuntu16.04.1 + deb.sury.org + 1 — cli)

  
    
      

$ pr = \ App \ Classes \ Models \ Program :: findOrFail(1)       => App \ Classes \ Models \ Program {#3325            id:“ 1”,            author_id:“ 6”,            标题:“行为健康:PTP”,            created_at:“ 2018-08-23 16:47:18.000”,            Updated_at:“ 2018-08-23 16:47:18.000”,            Deleted_at:null,            westco_service_id:null,            allow_changes:null,          }       $ pr-> update(['title'=>'新标题']);       InvalidArgumentException,消息为“数据丢失”       `

    
  

我的补习班截图: https://imgur.com/a/X4YVEx5

任何建议都值得赞赏!

1 个答案:

答案 0 :(得分:0)

这里的解决方案是从我的模型中删除所有$ dateFormat属性。我还必须删除不会令我感到兴奋的$ dates属性,但这是我可以使用的东西。