Laravel 单击按钮时更改数据库列

Laravel Change database column when button is clicked

我想更改任务的完成状态。我在数据库中有一个 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');
}

它给我的错误是:

Attempt to assign property of non-object

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

$task->save; 应该是 $task->save();

使用 ->save,它正在模型上寻找 属性,因此错误消息重新 'assigning a property'。而 ->save() 调用对象的保存方法。

在您的控制器中,您为 $task->status_id 分配了 $request->status_id 的值,但实际上您并没有在 HTML 的表单中传递 status_id代码。您可以在表单中放置一个隐藏元素 <input name="status_id" value="1" />.

同时,不要忘记$task->save;必须是$task->save();

祝你好运!

你应该改变:

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}