2017-08-28 190 views
0

我試圖更新數據透視表中的值。這是我的方法:UpdateExistingPivot方法不起作用

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()方法不起作用。我希望你能幫忙。

回答

2

爲了更新現有記錄,您必須使用guest_idApp\Invitation的外鍵名稱而不是您的透視ID,否則您沒有與您的透視ID匹配的當前事件的關係。

$id = $actualPivot['guest_id']; // change guest_id for your foreig key name of \App\Invitation 
$status = $actualPivot['status']; 
if ($newStatus != $status) 
{ 
    dd($event->guests()->updateExistingPivot($id, ['status' => $newStatus])); 
}