使用传入对象进行更新时出现重复输入错误

时间:2018-09-19 02:09:51

标签: php laravel eloquent

我正在尝试一种新的方式来更新服务器的事件(不是Laravel事件,而是像聚会或野餐)。我的想法是通过请求参数将具有更新信息的事件发送到控制器。此更新的事件与其更新的事件具有相同的ID。例如,已保存在数据库中的从8:00 pm开始的生日聚会活动。我传入了具有相同ID的此事件的更新版本,但开始时间为9:00 pm。我的目标是避免在更新控制器中列出参与者的所有属性。我遇到的问题是,当我去保存更新的事件时,遇到重复的条目冲突。这些事件具有相同的ID,因此我对其为何不仅仅执行更新感到困惑。我假设它是在Laravel处理数据库更新时处理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
        ]); 
    ............
}

1 个答案:

答案 0 :(得分:0)

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