Monday, August 20, 2018

How to update field in table Laravel or create?

I try to update field rate in table by primary key user_id.

So, I need to increment of decrement rate field. If row is not exist I need to create it.

I tried:

$this->point = -1; // Or $this->point = 1;
Rating::updateOrCreate(["user_id", $id], ["rate" => $this->point]);

But it does not work:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from `rating` where (`0` = user_id and `1` = 5) limit 1)

Solved

This is because your passing the column and the value as two separate values.

Change:

["user_id", $id]

to:

["user_id" => $id]

Hope this helps!


Laravel (eloquent) provides a fluent way to update related models.

Assuming the following model structure:

Rating.php

public function user()
{
    return $this->belongsTo('App\User');
}

User.php

public function ratings()
{
    return $this->hasMany('App\Rating');
}

You can easily update the relation via associate()

$user = User::findOrFail($userId);
$rating = Rating::findOrFail($ratingId);  

$rating->user()->associate($user)->save();

Read more about Relationships in Eloquent


No comments:

Post a Comment