25
votes

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?

4
You have to first select the row you want to update. How would you get the id of the selection when you post the update request?Jilson Thomas
Try Something like this: Selection::whereId($id)->update($request->except(['_method','_token']));Jilson Thomas

4 Answers

54
votes

Please check the code below and this would solve your problem:

Selection::whereId($id)->update($request->all());
8
votes

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());
5
votes

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();
0
votes

You can also simply update the fields manually:

Model::where('id',$id)->update(['english_name' => $english_name,'name' => $name]);