php - 使用传入对象更新时出现重复条目错误
问题描述
我正在尝试一种为我的服务器更新事件的新方法(不是 Laravel 事件,就像派对或野餐一样)。我的想法是通过请求参数将带有更新信息的事件发送到控制器中。此更新的事件将具有与其更新的事件相同的 id。一个示例是已保存在数据库中的从晚上 8:00 开始的生日聚会活动。我用相同的 id 传递了这个事件的更新版本,但开始时间是晚上 9:00。我的目标是避免必须在更新控制器中列出派对的所有属性。我遇到的问题是,当我去保存更新的事件时,我遇到了重复条目违规。这些事件具有相同的 id,所以我有点困惑为什么它不只是执行更新。我' m 假设它在 Laravel 进行数据库更新时处理对象 id 的方式内。有什么帮助或建议吗?代码如下。
控制器
public function update() {
//Get updated event from request
$event = request()->event;
//Ensure current user created event
if(Auth::user()->createdEvent($event)) {
$event->save();
return Constants::EVENT_UPDATED_SUCCESSFULLY;
}
return Constants::EVENT_FAILED_TO_UPDATE;
}
测试
public function testUpdate() {
//User for creating events
$user = factory(User::class)->create();
//Create base event and save to db
$event = factory(Event::class)->create([
'user_id' => $user->id
]);
//Matching event with all modified attributes
$modifiedEvent = factory(Event::class)->make([
'id' => $event->id,
'user_id' => $user->id
]);
$res = $this->call('POST', 'api/event/update', [
'event' => $modifiedEvent,
'api_token' => $user->api_token
]);
............
}
解决方案
Laravel 框架中的底层设计阻止了我在上面尝试做的事情。最简单的方法最终是使用函数 getAttributes() 和 setRawAttributes()。https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_getAttributes
推荐阅读
- sql-server - 表关系 - 最佳实践
- python - 如何多次编辑附加到列表中的行?
- javascript - 由于 Promise 链接,Firebase Firestore 更新查询不会执行。我究竟做错了什么?
- linux - 面临 ORA-01033:由于数据文件问题,ORACLE 初始化或关闭正在进行中
- javascript - Meteor 应用程序部署后的代码覆盖率
- android - ContryCodePicker 在组件树中显示为问号
- android - 如何获取 Webview 访问的链接?
- amazon-web-services - AWS Cloudfront 自定义子域 TSL/SSL:“不安全/证书无效”
- python - python生成器中的一行代码
- javascript - 按下搜索图标后如何展开搜索栏