danjswade
danjswade

Reputation: 567

Update Table Using Laravel Model

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

Answers (5)

Alp Altunel
Alp Altunel

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

Kaviyarasan Shanmugam
Kaviyarasan Shanmugam

Reputation: 25

You can also simply update the fields manually:

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

Upvotes: 3

Jilson Thomas
Jilson Thomas

Reputation: 7303

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

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

Upvotes: 70

Martin Bean
Martin Bean

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

The Alpha
The Alpha

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

Related Questions