单击按钮时Laravel更改数据库列
Posted
技术标签:
【中文标题】单击按钮时Laravel更改数据库列【英文标题】:Laravel Change database column when button is clicked 【发布时间】:2018-03-16 09:43:19 【问题描述】:我想更改要完成的任务的状态。我在数据库中有一个 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');
它给我的错误是:
尝试分配非对象的属性
如果需要更多信息,请告诉我
【问题讨论】:
【参考方案1】:$task->save;
应该是$task->save();
使用->save
,它正在寻找模型上的属性,因此错误消息重新“分配属性”。而->save()
调用对象的保存方法。
【讨论】:
谢谢!我会记住关于保存的【参考方案2】:在您的控制器中,您为$task->status_id
分配了$request->status_id
的值,但实际上您并没有在html 代码中的表单中传递status_id。您可以在表单中添加一个隐藏元素 <input name="status_id" value="1" />
。
同时,别忘了$task->save;
必须是$task->save();
祝你好运!
【讨论】:
好的,谢谢!我已将该输入添加到表单并将其隐藏,但我需要向控制器添加任何内容吗? @L.Fox 不,你不会。您只需要在控制器中的某处明确说明要将列设置为 1,您可以对其进行硬编码或在提交的表单中使用隐藏输入。【参考方案3】:你应该改变:
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
【讨论】:
好的,谢谢!控制器如何知道将 status_id 更改为 1 这是在$task->status_id = $request->status_id;
这一行中完成的——你在$request->status_id
中发送1,所以它被设置为1,在下一行它被保存以上是关于单击按钮时Laravel更改数据库列的主要内容,如果未能解决你的问题,请参考以下文章
使用 JQuery 或 codeigniter 单击按钮时如何更改数据库表的值(设置为默认 false 的布尔列)