Reputation: 567
I've got a table for a sports team. The record shows the team selection and some other information. I want to update the record with the team selection. My model is thus:
class Selection extends Model {
protected $table = "selection";
protected $fillable = [
'loose',
'hooker',
'tight',
'secrow1',
'secrow2',
'blindflank',
'openflank',
'eight',
'scrum',
'fly',
'leftwing',
'rightwing',
'fullback',
'sub1',
'sub2',
'sub3',
'sub4',
'sub5'
];
}
So I have a form which gives all the data for the positions and gives the id for the record in the DB. In my controller, I've got:
public function storeFirstTeam()
{
$input = Request::all();
Selection::update($input->id,$input);
return redirect('first-team');
}
But I get the following error:
Non-static method Illuminate\Database\Eloquent\Model::update() should not be called statically, assuming $this from incompatible context
Can anyone point out my silly error?
Upvotes: 36
Views: 124006
Reputation: 3443
it is possible to update with primary key but in my case I dont have id field in the detail table. To do it just run a query like this:
DB::table("shop_menu_detail")
->where(['name' => 'old name', 'language' => 'english'])
->update(['name' => 'new name']);
where is used as it is.
Upvotes: 1
Reputation: 25
You can also simply update the fields manually:
Selection::whereId($id)->update($request->all());
Upvotes: 3
Reputation: 7303
Please check the code below and this would solve your problem:
Selection::whereId($id)->update($request->all());
Upvotes: 70
Reputation: 39389
The error message tells you everything you know: you’re trying to call a method statically (using the double colons) that isn’t meant to be.
The update()
method is meant to be called on a model instance, so first you need to retrieve one:
$selection = Selection::find($id);
You can then can the update()
method on that:
$selection->update($request->all());
Upvotes: 15
Reputation: 146191
You should write it like given example below:
Selection::where('id', $input['id'])->update($input);
// Or use this using dynamic where
Selection::whereId($input['id'])->update($input);
Alternatively, you may write it like this as well:
Selection::find($input['id'])->fill($input)->save();
Upvotes: 8