2017-10-04 35 views
2

我想更改任務的狀態以完成。我在數據庫中有一個status_id列,1表示完成。我想點擊按鈕到STATUS_ID更改爲1Laravel單擊按鈕時更改數據庫列

我的路線

Route::patch('/tasks/completed/{Task}', '[email protected]')->name('completedUpdate'); 

我的按鈕

<form action="{{ route('completedUpdate', $task->id) }}" method="POST"> 
    {{ csrf_field() }} 
    {{ method_field('PATCH') }} 
    <button type="submit" class="button is-inverted" style="margin-top: 10px;">Mark Complete</button> 
    </form> 

我控制器

public function completedUpdate(Request $request, $task) 
{ 
    $task->status_id = $request->status_id; 

    $task->save; 

    return redirect()->back()->with('message', 'task marked complete'); 
} 

錯誤它給了我是:

嘗試給非對象的屬性

讓我知道是否需要

回答

1

你應該改變:

public function completedUpdate(Request $request, $task) 
{ 
    $task->status_id = $request->status_id; 

    $task->save; 

    return redirect()->back()->with('message', 'task marked complete'); 
} 

到:

public function completedUpdate(Request $request, Task $task) 
{ 
    $task->status_id = $request->status_id; 

    $task->save(); 

    return redirect()->back()->with('message', 'task marked complete'); 
} 

,所以你需要typehint $任務變量的類型和使用save()方法而不是save財產。

而且可能代替:

/tasks/completed/{Task} 

你應該使用:

/tasks/completed/{task} 
+0

好的,謝謝!控制器如何知道將status_id更改爲1 –

+0

這是在$ line- $ status_id = $ request-> status_id;' - 你在'$ request-> status_id'中發送1,因此它被設置爲1並且在下一行中它被保存 –

1

$task->save;任何更多的信息應該是$task->save();

隨着,它正在尋找模型上的屬性,因此錯誤消息重新'分配屬性'。而->save()調用對象的保存方法。

+0

謝謝!我會記得關於保存 –

0

在您的控制器中,您將$task->status_id的值指定爲$request->status_id,但實際上未將HTML中的status_id傳遞到您的表單中。您可以在您的表單中放置一個隱藏元素,即<input name="status_id" value="1" />

同時,不要忘記$task->save;必須$task->save();

祝你好運!

+0

好的謝謝!我已經將該輸入添加到窗體並隱藏了它,但是是否需要向控制器添加任何內容? –

+0

@ L.Fox不,你不會。你只需要在你的控制器的某個地方顯式地將列設置爲1,你可以對它進行硬編碼或者在提交的表單中使用隱藏的輸入。 – jmosawy

+0

甜蜜的謝謝你!我得到它的工作 –