Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用laravel eloquent删除和更新关系表上的数据?_Laravel_Api_Eloquent - Fatal编程技术网

如何使用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。你能告诉我你是怎么做的吗?我用你上面提到的方法做的,我发现了我的错误所在。我将请求值转换为整数,效果很好。谢谢你的回答