单击按钮时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-&gt;save; 应该是$task-&gt;save();

使用-&gt;save,它正在寻找模型上的属性,因此错误消息重新“分配属性”。而-&gt;save() 调用对象的保存方法。

【讨论】:

谢谢!我会记住关于保存的【参考方案2】:

在您的控制器中,您为$task-&gt;status_id 分配了$request-&gt;status_id 的值,但实际上您并没有在html 代码中的表单中传递status_id。您可以在表单中添加一个隐藏元素 &lt;input name="status_id" value="1" /&gt;

同时,别忘了$task-&gt;save;必须是$task-&gt;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-&gt;status_id = $request-&gt;status_id;这一行中完成的——你在$request-&gt;status_id中发送1,所以它被设置为1,在下一行它被保存

以上是关于单击按钮时Laravel更改数据库列的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQuery 或 codeigniter 单击按钮时如何更改数据库表的值(设置为默认 false 的布尔列)

Laravel 和 Livewire 在单击时更改按钮样式

如果单击按钮,下拉列表选项会更改(VueJS 和 Laravel 6)

输入未更改时观察者未触发更新事件 - Laravel

laravel 在按钮单击时写入 mysql 数据库

从数据库中获取值并在 Laravel 中单击按钮时以表单形式显示它