0

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

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.

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

4

2 回答 2

2

您已经在$anss使用route-model binding进行解析。

public function updateAnswer(Answer $anss)

您正在尝试findOrFail使用模型作为参数进行调用,因为ModelimplementsArrayable将返回 a Collection,从而中断更新调用。

请参阅Illuminate\Database\Eloquent\BuilderfindOrFail -> 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();
    }

于 2021-03-10T07:00:43.867 回答
0

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

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

或者

Answer::where('id', $anss->id)
    ->update($validate_data);
于 2021-03-10T06:59:25.057 回答