检查数据库并插入数据是否不存在

时间:2017-09-24 08:06:32

标签: php mysql laravel laravel-5 laravel-5.3

我的表'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'
        }

2 个答案:

答案 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));