Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel: UpdateOrCreate on Relation?

A user hasOne car.

users

id | name
1  | Bob
2  | Alice

cars

idMember |  color  |  energy
   1     |  blue   |    0.95

Inside the User class I have

public function car()
{
  return $this->hasOne('App\Car','idMember');
}

I want to call updateOrCreate on the relation Model like this:

$user->car()->updateOrCreate(['idMember' => $user->id], ['color' => 'red', 'energy' => '0.1']); 

However, I get the error message

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: update cars set color = red, energy = 0.1, updated_at = 2018-01-12 15:26:47 where id is null)

Why is he looking for

id is null

?

like image 646
Adam Avatar asked Jan 02 '23 22:01

Adam


1 Answers

To be clear, your original syntax is correct. You can use it on a relation:

$user->car()->updateOrCreate(['idMember' => $user->id], [
    'color' => 'red',
    'energy' => '0.1',
]);

This will check if there is a car with idMember === $user->id; if so, update color and energy. If not, it will create a car record with idMember, color, and energy.

I haven't tested, but based on the first parameter's array type, you should be able to pass in multiple match conditions, such as

['idMember' => $user->id, 'day' => 'tuesday']
like image 70
agm1984 Avatar answered Jan 05 '23 14:01

agm1984