2017-08-28 23 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

既存のレコードを更新するには、App\Invitationの外部キーの名前であるピボットIDの代わりにApp\Invitationの名前を使用する必要があります。それ以外の場合は、ピボット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])); 
} 
関連する問題