Reputation:
I want to update some data from the DB, so I added this Controller method:
public function updateAnswer(Answer $anss)
{
$validate_data = Validator::make(request()->all(),[
'answer' => 'required'
])->validated();
$answer = Answer::findOrFail($anss);
$answer->update($validate_data);
return back();
}
Now the problem is I get this error:
Method Illuminate\Database\Eloquent\Collection::update does not exist.
So how to solve this issue?
Upvotes: 0
Views: 1554
Reputation: 3764
You are already resolving $anss
using route-model binding.
public function updateAnswer(Answer $anss)
You are trying to call findOrFail
with a model as an argument, which since Model
implements Arrayable
will return a Collection
, thus breaking the update call.
See Illuminate\Database\Eloquent\Builder
findOrFail -> find -> findMany -> return $this->whereKey($ids)->get($columns);
.
Try:
public function updateAnswer(Answer $anss)
{
$validate_data = Validator::make(request()->all(),[
'answer' => 'required'
])->validated();
$anss->update($validate_data);
return back();
}
Upvotes: 2
Reputation: 2987
$anss
is already an Answer object so you do not need to query it from the database.
$anss->answer = $validate_data['answer'];
$anss->save();
or
Answer::where('id', $anss->id)
->update($validate_data);
Upvotes: 0