2016-09-17 39 views
1

我試圖更新我的數據透視表approvals_documentisApprove這是一個額外的列。我使用這種方法,所以它不會在我的數據透視表中重複。同步()方法更新數據透視表

查看

@foreach ($pendingDocuments as $list) 
    <form class = "form-inline" id="submitMe" method = "post" action = "{{ url('documents/pending') }}"> 

     <input type = "hidden" name = "id" value = "{{ $list->id }}"> 

     <div class = "radio"> 
      <label><input type = "radio" onclick = "showApprove()" name = "status" value = "1"> Approve</label> 
     </div> 


     <div class = "radio"> 
      <label><input type = "radio" onclick = "showReject()" name = "status" value = "2"> Reject</label> 
     </div> 

     <input type = "hidden" name = "_token" value = "{{ Session::token() }}"> 

    </form> 
@endforeach 

控制器

public function updateApprovalsDocument(Request $request, $id) 
{ 
    $document = DB::table('approvals_document') 
     ->select('approvals_document.id', 'approvals_document.isApprove') 
     ->where('approvals_document.id', '=', $id) 
     ->first(); 


    foreach($request->status as $status) 
    { 
     $document->sentToApprovers()->sync([$status => ['isApprove' => $request->status, 'updated_at' => new DateTime]], true); 
    } 


    return redirect()->back(); 
} 

$status這裏是在我看來,單選按鈕的名稱。我需要在這裏使用first()方法來使用單選按鈕更新我的記錄嗎?

路線

Route::get('/documents/pending', 
[ 
    'uses' => '\App\Http\Controllers\[email protected]', 
    'as' => 'document.pending', 
]); 

Route::post('/documents/pending', 
[ 
    'uses' => '\App\Http\Controllers\[email protected]', 
    'as' => 'document.pending', 
]); 

錯誤

Missing argument 2 for App\Http\Controllers\DocumentController::updateApprovalsDocument() 

但我已經定義我的參數$idRequest $request和進口頂部的use Illuminate\Http\Request;任何幫助,我該如何解決這個問題?

UPDATE

查看

<form class = "form-inline" id="submitMe" method = "post" action = "{{ route('documents/pending',['id' => [$list->id]]) }}"> 

      <div class = "radio"> 
       <label><input type = "radio" onclick = "showApprove()" name = "status" value = "1"> Approve</label> 
      </div> 


      <div class = "radio"> 
       <label><input type = "radio" onclick = "showReject()" name = "status" value = "2"> Reject</label> 
      </div> 

     <input type = "hidden" name = "_token" value = "{{ Session::token() }}"> 

    </form> 

控制器

public function updateApprovalsDocument(Request $request) 
{ 
    $id = $request->get('id'); //add this to get the id 
    $document = DB::table('approvals_document') 
     ->select('approvals_document.id', 'approvals_document.isApprove') 
     ->where('approvals_document.id', '=', $id) 
     ->first(); 

    $document->sentToApprovers()->sync([$request->status => ['isApprove' => $request->status, 'updated_at' => new DateTime]], true); 
} 
+0

你能不能發佈調用這個方法的路由 – jaysingkar

+0

@jaysingkar你好!我更新了我的帖子,請看。 – Francisunoxx

+0

您的方法中的'$ id'參數沒有從路由傳遞,因爲它沒有參數。嘗試從您的方法的參數列表中刪除$ id。 – jaysingkar

回答

1

從方法的參數列表中刪除$id

public function updateApprovalsDocument(Request $request) 
{ 
    $id = $request->get('id'); 
    $document = DB::table('approvals_document') 
     ->where('approvals_document.id', '=', $id) 
     ->update(['isApprove' => $request->status, 'updated_at' => new DateTime]]); 

    return redirect()->back(); 
} 
+0

爲什麼我應該在參數中刪除'$ id'?我嘗試了你的解決方案,但是它說''foreach()'提供的無效參數'' – Francisunoxx

+0

'爲'$ id'工作,你需要爲你的路線添加參數' '/ documents/pending/{id}''並更新你的form'的行爲'action =「{{route('documents/pending',[$ list-> id])}}'' – jaysingkar

+0

btw,'爲foreach()提供的無效參數不是由於id,'$ status '不是一個數組,你也正在爲每一個重寫它​​。 – jaysingkar