如何使用laravel eloquent删除和更新关系表上的数据?
我有三张桌子。他们是,如何使用laravel eloquent删除和更新关系表上的数据?,laravel,api,eloquent,Laravel,Api,Eloquent,我有三张桌子。他们是, users id name 1 personA 2 personB 3 personC skills id name 1 html 2 css 3 javascript userskills userid skills_id 2 3 2 1 1 2 1 3 我通过请求获取数据,比如[2,1]和用户id 2在userid 2中
users
id name
1 personA
2 personB
3 personC
skills
id name
1 html
2 css
3 javascript
userskills
userid skills_id
2 3
2 1
1 2
1 3
我通过请求获取数据,比如[2,1]和用户id 2
在userid 2中的用户技能表上有技能id
3,1。现在我必须删除技能id 3并在用户id 2上插入技能id 2。
我如何通过laravel雄辩的方法实现它。你的问题有点含糊不清,但假设你得到的是用户id 2,你想从userskills中删除的技能是2,1 删除
UserSkills::where(['userid' => 2 ])->whereIn('skills_id',[2,1])->delete();
插入
UserSkills::create(['skills_id' => 2, 'userid' => 2 ]);
由于您有一个数据透视表,所以可以使用
belongToMany
关系。在用户
模型中添加关系
public function skills()
{
return $this->belongsToMany(Skill::class, 'userskills','userid', 'skills_id');
//userskills is the pivot table
}
现在使用sync
方法进行更新
$user = User::findOrFail(2); //your request id
$user->skills()->sync([1, 2]); //request array
这将从数据透视表中删除3,并在表中添加2
在中阅读有关此关系的更多信息使用关系的更简单方法是
$user->skills()->sync([2, 1]);
同步将删除同步方法中不存在的技能。它可以工作,但会将数据保存在同一列中,如1,2,但我们希望像userskills表一样单独创建字段。你知道@zahid hasan emonit应该像你说的那样工作吗。单独的行用于单独的ID。你能告诉我你是怎么做的吗?我用你上面提到的方法做的,我发现了我的错误所在。我将请求值转换为整数,效果很好。谢谢你的回答