【问题标题】:Laravel 8: Method Illuminate\Database\Eloquent\Collection::update does not exist ERRORLaravel 8:方法 Illuminate\Database\Eloquent\Collection::update 不存在错误
【发布时间】:2021-06-08 02:14:40
【问题描述】:

我想从数据库中更新一些数据,所以我添加了这个Controller方法:

public function updateAnswer(Answer $anss)
    {
        $validate_data = Validator::make(request()->all(),[
           'answer' => 'required'
        ])->validated();

        $answer = Answer::findOrFail($anss);
        $answer->update($validate_data);
        return back();
    }

现在的问题是我得到了这个错误:

Method Illuminate\Database\Eloquent\Collection::update does not exist.

那么如何解决这个问题呢?

【问题讨论】:

标签: php laravel laravel-8


【解决方案1】:

$anss 已经是一个 Answer 对象,因此您无需从数据库中查询它。

$anss->answer = $validate_data['answer'];
$anss->save();

Answer::where('id', $anss->id)
    ->update($validate_data);

【讨论】:

    【解决方案2】:

    您已经使用route-model binding 解析$anss

    public function updateAnswer(Answer $anss)
    

    您尝试使用模型作为参数调用findOrFail,因为Model 实现Arrayable 将返回Collection,从而中断更新调用。

    Illuminate\Database\Eloquent\Builder findOrFail -> find -> findMany -> return $this->whereKey($ids)->get($columns);

    试试:

        public function updateAnswer(Answer $anss)
        {
            $validate_data = Validator::make(request()->all(),[
               'answer' => 'required'
            ])->validated();
    
            $anss->update($validate_data);
    
            return back();
        }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 2021-05-30
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多