我正在尝试一种新的方式来更新服务器的事件(不是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
]);
............
}
答案 0 :(得分:0)
Laravel框架中的基础设计阻止了我在上面试图做的事情。最简单的方法最终是使用函数getAttributes()和setRawAttributes()。 https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_getAttributes