我的表'role'包含字段user_id和role_id.I已从for循环中获取另一个查询154,516中的新值。我想检查154是否在角色表user_id中如果不退出则插入新字段或者如果存在则更新字段。在我的情况下,更新user_id'154'的role_id并为'516'插入新行。
role //table
user_id role_id
210 1
125 2
310 1
154 1
foreach($heads as $head){
$first_count=$first_count+1;
$roleMappingObject = new role_mapping();
$roleMappingObject->user_id = $head->user_id;
$roleMappingObject->role_id = 1;
$roleMappingObject->save (); //this will insert the new row for both 154 and 516 but I want to update '154'
}
答案 0 :(得分:1)
在您的情况下,您的 role_id 似乎不是外键,如果是这种情况,您可以使用雄辩的函数firstOrCreate/ firstOrNew
firstOrCreate 将搜索具有给定数据的实例并返回该实例或将保存该实例。
firstOrNew 将查找并返回或创建实例,但不会将其保存在数据库中,因为您必须通过调用save()方法来执行此操作。
但是如果你的role_id是外键,那就是你应该更喜欢它在laravel的文档中定义的方式,many to many relationship将角色表更改为 role_user < / strong>并在用户和角色表之间创建关系。通过这种方式,您将能够使用方法attach / detach。
答案 1 :(得分:0)
在用户和角色之间设置多对多的关系
用户模型
public function roles()
{
return $this->belongsToMany(Role::class, 'role_user');
}
角色模型
public function users()
{
return $this->belongsToMany(Role::class, 'role_user');
}
然后
$user->roles()->attach($roleId));