保存模型时的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_at
和 updated_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模型尾随数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章