美文网首页
laravel 多对多

laravel 多对多

作者: 二棉酷 | 来源:发表于2019-07-25 11:04 被阅读0次

    查询

    关联关系的一个例子就是在权限管理中,一个用户可能有多个角色,同时一个角色可能被多个用户共用。例如,很多用户可能都有一个“Admin”角色。要定义这样的关联关系,需要三张数据表:users、roles 和 role_user,role_user 表按照关联模型名的字母顺序命名,并且包含 user_id 和 role_id 两个列。

    多对多关联通过编写调用 belongsToMany 方法返回结果的方式来定义,例如,我们在 User 模型上定义 roles 方法:

    users表:id,......;
    roles表:id,.....;
    role_user表:user_id,role_id

      <?php
      namespace App;
      use Illuminate\Database\Eloquent\Model;
      
      class User extends Model{
         /**
          * 用户角色
          */
         public function roles()
         {
         //这里要注意,Role前必须加APP\,还有就是第二个参数是表名,数据库里那个表 叫啥,他就叫啥,第三个参数是本类的字段,第四个参数是要查找的字段        
        return $this->belongsToMany('App\Role','role_user','user_id','role_id');
        }
     }
    
    //获取数据的方法
    $userinfo = $user->find($id);
    $return_data = $userinfo->with('roles')->get();
    $return_data = $userinfo->roles()->get();
    

    添加多对多关联

    $user = App\User::find(1);
    $user->roles()->attach(1,['role_id'=>$value]);
    

    或者

    $per_id = [1,2,,,]
    $user = $UserModel::create($data);
    foreach($per_id as $v){
          $res->roles()->attach($user ->id,['role_id'=>$v]);
    }
    

    同步多对多关联

    sync:把1号用户关联的角色同步为2,3号角色,并把关联表2号角色的role_id字段赋值为$value

    $user = App\User::find(1);
    $user->roles()->sync([2=>['role_id'=>$value],3,4]);
    

    这时1号用户关联的角色就是2,3,4号角色,因为1号角色不在sync方法中,所以同步时1号角色的关联会解除

    删除多对多关联

    $user = App\User::find(1);
    $user->roles()->detach($roleId);
    
    $roleId为2时,删除1号用户的2号角色,1号用户关联的角色还剩下3,4号角色
    $roleId为空时,删除1号用户的所有角色,1号用户关联的角色都被删除
    $roleId也可以为数组[2,3],删除数组内的指定角色,1号用户关联的角色还剩下4号角色**
    所以,detach适合删除关联
    

    相关文章

      网友评论

          本文标题:laravel 多对多

          本文链接:https://www.haomeiwen.com/subject/fbvcrctx.html