调用未定义的方法stdClass :: save()

时间:2016-12-09 01:26:43

标签: php laravel laravel-5 eloquent laravel-5.2

我试图保存到数据库中,但我经常收到此错误

调用未定义的方法stdClass :: save()

我的控制器

 $c = DB::table('subject_user')->where('user_id', $value)->first();

 $c->auth_teacher = '1';

 $c->save();

6 个答案:

答案 0 :(得分:9)

尝试这种方法

我没有尝试使用save条件的where方法。希望这种方法可以解决您的问题。

 DB::table('subject_user')->where('user_id', $value)->update(['auth_teacher' => 1]);

答案 1 :(得分:4)

我遇到了同样的问题并找出了真正的Laravel答案。

你在这里接受的答案(https://stackoverflow.com/a/41051946/470749)并不遵循最真实的Laravel方式。

当我在https://laravel.com/docs/5.4/eloquent#retrieving-models重新阅读文档时,我注意到->save()只有在我检索对象的方式是通过模型时才会起作用像这样:

$flights = App\Flight::where('active', 1)
           ->orderBy('name', 'desc')
           ->take(10)
           ->get();

无需在任何地方使用DB::table(),使用它似乎不是推荐的方式。

因此,您可以将DB::table('subject_user')->where更改为App\Subject_user::where(或适用于您的任何内容)。

答案 2 :(得分:0)

DB :: table(' subject_user') - >其中(' user_id',$ value) - >更新([' auth_teacher' => ; 1]);

我已经成功了。

答案 3 :(得分:0)

您可以在此处阅读,有两种保存/更新记录的方法。在您的情况下,您需要执行以下操作:https://laravel.com/docs/6.x/queries#updates

$affected = DB::table('users')
              ->where('id', 1)
              ->update(['votes' => 1]); 

答案 4 :(得分:0)

在某些情况下,Laravel 控制器不接受 find 方法。也许您已经尝试过您的控制器。

解决方案 1)
尝试在模型中使用find 方法

解决方案 2)
尝试在控制器中使用 Where 子句 而不是 find。

答案 5 :(得分:0)

如果您开始使用 DB:: 而不是 Model:: 因为您需要动态表名调用,则可以使用动态接口调用代替,但我想知道这是否是一个好习惯,任何愿意解释的人以下是错误的(因为它工作正常):

$model = 'User'; //Use the name of the model, not the table name
$interface_model = '\App\Models\\' . $model; //Needed to avoid the manual import of each model
$entry = $interface_model::where('id', $id)->first();
//$entry now support save()