首页 > 解决方案 > 使用传入对象更新时出现重复条目​​错误

问题描述

我正在尝试一种为我的服务器更新事件的新方法(不是 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
        ]); 
    ............
}

标签: phplaraveleloquent

解决方案


Laravel 框架中的底层设计阻止了我在上面尝试做的事情。最简单的方法最终是使用函数 getAttributes() 和 setRawAttributes()。https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_getAttributes


推荐阅读