Laravel调用未定义的方法

时间:2016-12-01 13:05:31

标签: php laravel

我正在尝试更新数据库中的数据,但我一直收到错误。

  

调用未定义的方法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'));
    }
}

3 个答案:

答案 0 :(得分:1)

要执行$thing->save()$thing必须是扩展ModelArdent的模型实例。

执行$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'));
}

}