美文网首页
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 多对多

    查询 关联关系的一个例子就是在权限管理中,一个用户可能有多个角色,同时一个角色可能被多个用户共用。例如,很多用户可...

  • Laravel ORM SUM 多字段

    laravel 怎么对多行的多列求和:

  • laravel 模型关联

    laravel 模型关联 1、 一对一 2、 定义反向关联(可用户一对多的反向关联) 3、 一对多 4、 多对多 ...

  • Laravel 文章汇集

    LARAVEL .ENV文件配数组laravel redis操作大全laravel5篇之使用事务laravel多库...

  • laravel 基础教程 —— 验证

    验证 简介 Laravel 对验证应用的输入数据提供了多中途径的实现。默认的,Laravel 的基础控制器类使用了...

  • 多对多

    一、单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细...

  • 多对多

  • 多对多

    可用方法 $user ->roles ()->save () $user ->roles ()->savemany...

  • 多对多

  • laravel多站点配置

    博主运行环境:windows 7、homestead、laravel5.2 按照老师配的环境 环境配置及快速上手-...

网友评论

      本文标题:laravel 多对多

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