保存模型时的Laravel模型尾随数据[重复]

Posted

技术标签:

【中文标题】保存模型时的Laravel模型尾随数据[重复]【英文标题】:Laravel model Trailing Data when save the model [duplicate] 【发布时间】:2018-10-16 22:46:01 【问题描述】:

我有一些这样的代码

    $editStuState = StuAtt::where('studentId' , '=' , $id)->first();
    $editStuState -> leave +=1;
    $editStuState -> present = $editStuState -> present-1;
    $editStuState->update();
                            //OR
    $editStuState->save();
    return 'this is good';

我无法保存或更新我的数据, 当我删除更新和保存相关行时,它可以打印文本。

这是dd($editStuState) 数据

StuAtt #382 ▼
  #table: "stu_attendance"
  #connection: "mysql"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:7 [▼
    "id" => "7"
    "studentId" => "1"
    "present" => "2"
    "absent" => "1"
    "leave" => "10"
    "created_at" => "2018-04-16 11:17:41.176898"
    "updated_at" => "2018-04-16 06:47:41.000000"
  ]
  #original: array:7 [▼
    "id" => "7"
    "studentId" => "1"
    "present" => "2"
    "absent" => "1"
    "leave" => "10"
    "created_at" => "2018-04-16 11:17:41.176898"
    "updated_at" => "2018-04-16 06:47:41.000000"
  ]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
  #guarded: array:1 [▶]

我也从 laravel 5.6 中得到了这个错误

InvalidArgumentException
Trailing data

【问题讨论】:

【参考方案1】:

在我的情况下,问题是表中 created_atupdated_at 的长度。在 Navicat 中的表格设计是这样的:

将其更改为 0 并保存更改:

【讨论】:

【参考方案2】:

我也有同样的问题,但是我把列名改成creation_date,问题解决了。

【讨论】:

【参考方案3】:

如果您使用 Postgres,您必须在模型中添加一些行。发生这种情况是因为 Postgres 中的 TIME WITH TIMEZONE。

还请阅读Date Mutators,因为 Laravel 已经支持此功能,只需在您的模型中添加以下行以覆盖该模型的默认 dateFormat:https://laravel.com/docs/5.7/eloquent-mutators#date-mutators

转到您的 App/Model(在 app 文件夹下,exp.User,SomeModel)添加以下行:

protected $dateFormat = 'Y-m-d H:i:sO';

最好的

【讨论】:

【参考方案4】:

如果您的数据库是 Postgres 并且您的字段是时间戳记,有时 Carbon 无法转换为默认格式(没有毫秒)。

如果不需要毫秒,则更新字段内容以不包含毫秒部分。

UPDATE YOURTABLE SET created_at = date_trunc('seconds', created_at),
updated_at = date_trunc('seconds', updated_at)

这将在没有毫秒的情况下标准化带时间戳的字段。

【讨论】:

【参考方案5】:

更改您的代码,来自:

$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->update();
                        //OR
$editStuState->save();
return 'this is good';

收件人:

$editStuState = StuAtt::where('studentId' , '=' , $id)->first();
$editStuState -> leave +=1;
$editStuState -> present = $editStuState -> present-1;
$editStuState->save();
return 'this is good';

方法->update(...)用于批量更新,查看Mass Updates

【讨论】:

我说我检查了它们并得到相同的错误。你看到 //OR 吗? 尝试将 protected $dateFormat = 'Y-m-d H:i:s'; 添加到您的模型中

以上是关于保存模型时的Laravel模型尾随数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

相关模型 eloquent laravel 中的自定义查询

带有 Eloquent 的 Laravel 不会在数据库中保存模型属性

使用 Laravel 模型保存多级数组

Laravel - 为啥使用尾随空格保存 CHAR 列?

为啥我的 Laravel 模型关系没有保存?

Laravel4:块函数不适用于模型保存()