我正在尝试更新数据透视表中的值。这是我的方法:
public function updateStatus(Event $event)
{
$this->authorize('updateStatus', $event);
$newStatus = Input::get('status');
$actualPivot = $event->guests()->where('user_id', Auth::id())->first()->pivot;
$id = $actualPivot['id'];
$status = $actualPivot['status'];
if ($newStatus != $status)
{
dd($event->guests()->updateExistingPivot($id, ['status' => $newStatus]));
}
return back();
}
我已经用HeidiSQL检查过了,该行没有按照它应该的方式更新。我也试过this solution,但是它没有更新该行,而是创建了一个新的行。有一个dd()
,它有这样的方法:
array:3 [▼
"attached" => array:1 [▼
0 => 1
]
"detached" => []
"updated" => []
]
这是我在Event
模型中定义的guests()
关系:
public function guests()
{
return $this->belongsToMany('App\User')
->using('App\Invitation')
->withPivot('id', 'status')
->withTimestamps();
}
我不知道为什么updateExistingPivot()
方法不起作用,希望你能帮忙。
1条答案
按热度按时间oug3syen1#
您必须使用
guest_id
或App\Invitation
外键的任何名称来代替透视ID,以便更新现有记录,否则您没有与透视ID匹配的当前事件的关系。