单击按钮时,Laravel Change数据库列

时间:2017-10-04 21:16:00

标签: php html database laravel laravel-5.5

我想更改任务的状态以完成。我在数据库中有一个status_id列,1等于完成。我想点击按钮将status_id更改为1

我的路线

Route::patch('/tasks/completed/{Task}', 'TasksController@completedUpdate')->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');
}

它给我的错误是:

  

尝试分配非对象的属性

如果需要更多信息,请告诉我

3 个答案:

答案 0 :(得分:1)

$task->save;应为$task->save();

使用->save,它正在模型上查找属性,因此错误消息是“分配属性”。而->save()调用对象的save方法。

答案 1 :(得分: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');
}

因此您需要输入$ task变量的类型并使用save()方法而不是save属性。

也可能代替:

/tasks/completed/{Task}

你应该使用:

/tasks/completed/{task}

答案 2 :(得分:0)

在您的控制器中,您为"coop"分配了$task->status_id的值,但实际上您并未在HTML代码中传递表单中的status_id。您可以在表单中放置隐藏元素$request->status_id

同时,不要忘记<input name="status_id" value="1" />必须是$task->save;

祝你好运!