Laravel: UpdateOrCreate on Relation?

2019-08-07 15:04发布

问题:

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

?

回答1:

Your cars model should have a primary key, commonly called "id". Create it.



回答2:

This is how I solved my problem without adding an unnecessary auto incrementing id to the cars model:

class Car extends Model
{

  protected $primaryKey   = 'idMember';
  public    $incrementing = false;


回答3:

In your model mention the primaryKey if primarykey is not "ID"

protected $primaryKey = "Your Primary Key";

If you do not need icnrementing for your primary key

public    $incrementing = false;

Thats it ..