我正在尝试更新数据库中的数据,但我一直收到错误。
调用未定义的方法Illuminate \ Database \ Query \ Builder :: save()
这是我的代码:
public function postTodo( Request $request ){
if ( $request->input('action') == 'set_as_done' ){
$thing = DB::Table('todo')->where('id', $request->input('id'));
if ( $thing ){
$thing->done = $request->input('set_as_done');
$thing->save();
}
return redirect(route('admin.todo'));
}
}
答案 0 :(得分:1)
要执行$thing->save()
,$thing
必须是扩展Model
或Ardent
的模型实例。
执行$thing = DB::Table('todo')->where('id', $request->input('id'));
时,$thing
变量是一个集合,与模型无关。
您必须为Thing.php
制作模型,然后才能执行此操作:
$thing = Thing::where('id', $request->input('id'));
if ( $thing ){
$thing->done = $request->input('set_as_done');
$thing->save();
}
答案 1 :(得分:0)
save方法适用于Eloquent模型而非构建器,因此您的代码需要触发更新查询而不是保存
我建议创建Eloquent模型todo,然后使用save()方法编写代码,这比使用构建器更有意义
public function postTodo( Request $request ){
if ( $request->input('action') == 'set_as_done' ){
$thing = DB::table('todo')->where('id', $request->input('id'))->first();
if ( $thing ){
DB::table('todo')->where('id', $request->input('id'))->update([
'set_as_done' => $request->input('set_as_done')
]);
}
return redirect(route('admin.todo'));
}
}
答案 2 :(得分:0)
我建议你使用php artisan make:model TodoModel为table todo创建模型。
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Todo extends Model{ protected $table = 'todo'; }
之后,您可以使用Todo保存数据。
public function postTodo( Request $request ){
if ( $request->input('action') == 'set_as_done' ){
$thing = Todo->find('id', $request->input('id'));
if ( $thing ){
$thing->set_as_done = $request->input('set_as_done')
$thing->save();
}
return redirect(route('admin.todo'));
}
}