首页 Order Laravel 正文

Laravel 模型的多对多关联

金鹏头像 金鹏 Laravel 2022-04-01 13:04:08 0 327
导读:一.多对多关联1.多对多关联,比前面两种要复杂一些,需要一张中间表,共三张;(1).users:用户表;(2).roles:权限表;(3).role_user:中间表:默认...
.多对多关

1. 多对多关联,比前面两种要复杂一些,需要一张中间表,共三张;

图片.png

(1) .users:用户表

(2) .roles:权限表

(3) .role_user:中间表:默认表名,user_idrole_id,默认外键可不指明;

 

2. 创建权限表:Role.php,留空;在 User.php 设置多对多关联

//多对多关联

public function role()

{

return $this->belongsToMany(Role ::class, 'role_user ', 'user_id ', 'role_id ');

}

 

PS:参 2 传中间表名,参数 34 如果是默认值,则可不传;

 

3.  多对多关联输出,查看用户都拥有哪些权限; $roles = User ::find(19)->role;

return $roles;

 

4.  获取权限列表中某一个数据,和一对多操作方法一样,但注意返回的表名称;

//注意,多对多这里 role()返回的是 role_user 

//通过 dd($roles)查看,所以,where 需要用 role_id 来指明

$roles = User ::find(19)->role()->where( 'role_id ', 1)->get();

return $roles;

 

//当然,你也可以使用集合的方式去实现筛选

$roles = User ::find(19)->role;

return $roles->where( 'id ', 1);

 

5.  多对多的反向关联和其它两种方式也差不多;

//反向多对多关联,后面 id 是反的

public function user()

{

return $this->belongsToMany(User::class, 'role_user ', 'role_id ',

'user_id ');

}

 

$users = Role ::find(1)->user;

return $users;

 

6.  多对多会生成一个中间字段:pivot,里面包含多对多的双 id

7.  如果想要 pivot字段包含更多的中间表字段,可以自行添加,还可以修改字段名;

return $this->belongsToMany(Role::class, 'role_user ', 'user_id ', 'role_id ')

->withPivot( 'details ', 'id ')

->as( 'pivot_name ');

 

8.  定义多对多绑定时,可以在绑定方法内筛选数据;

$this->belongsToMany(Role ::class) ... ->wherePivot( 'id ', 1);

 PS还有 wherePivotIn,以及派生的四种方法;

PS除了一对一,一对多,多对多,还有派生的远程一对一,远程一对多,以及多态一对一, 一对多,多态多对多。


本文地址:https://www.jinpeng.work/?id=172
若非特殊说明,文章均属本站原创,转载请注明原链接。
广告3

欢迎 发表评论:

  • 请填写验证码

日历

«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930

控制面板

您好,欢迎到访网站!
  查看权限
广告2

退出请按Esc键