二十七、PHP框架Laravel学习笔记——模型的多对多关联

二.多对多关联

  1. 多对多关联,比前面两种要复杂一些,需要一张中间表,共三张;
    在这里插入图片描述
    在这里插入图片描述

(1) .users:用户表;
(2) .roles:权限表;
(3) .role_user:中间表:默认表名,user_id,role_id,默认外键可不指明;

  1. 创建权限表:Role.php,留空;在 User.php 设置多对多关联;
    //多对多关联
public function role() { return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id'); 
}

在这里插入图片描述

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

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

在这里插入图片描述

  1. 获取权限列表中某一个数据,和一对多操作方法一样,但注意返回的表名称;
    //注意,多对多这里 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);

在这里插入图片描述

  1. 多对多的反向关联和其它两种方式也差不多;
    //反向多对多关联,后面 id 是反的
public function user() { return $this->belongsToMany(User::class, 'role_user', 'role_id', 'user_id'); 
}
$users = Role::find(1)->user; 
return $users; 

在这里插入图片描述

  1. 多对多会生成一个中间字段:pivot,里面包含多对多的双 id;
  2. 如果想要 pivot 字段包含更多的中间表字段,可以自行添加,还可以修改字段名;
return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id') ->withPivot('details', 'id') ->as('pivot_name'); 

在这里插入图片描述

  1. 定义多对多绑定时,可以在绑定方法内筛选数据;
$this->belongsToMany(Role::class) ... ->wherePivot('id', 1); 

在这里插入图片描述

PS:还有 wherePivotIn,以及派生的四种方法;
PS:除了一对一,一对多,多对多,还有派生的远程一对一,远程一对多,以及多态一对一, 多态一对多,多态多对多。这些更多的扩展,暂时不纳入基础的核心课程,防止过于繁杂冗余 导致劝退。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读 - Is Space-Time Attention All You Need for Video Understanding?

文章目录1 概述2 模型结构2.1 模型输入2.2 attention模块2.3 分类模块3 模型分析3.1 不同attention方式3.2 不同的输入3.3 不同的模型3.4 不同的预训练数据3.5 不同的数据量3.6 position embedding的影响3.7 长输入时长3.8 不同的transformer3.9 不同的patch size3.10 attentio…

iOS中常见的6种传值方式,UIPageViewController

通过属性传值、方法传值、代理传值、Block传值、单例传值、通知传值6种方式进行不同视图之间的传值。不同方式只需要在AppDelegate中更改下UINavigationController的根控制器即可。使用很简单的实例让你很快理解不同的传值方式。 UIPageViewController(上传者:JoneJ…

websocket 获取ip_Spark+Kafka+WebSocket+eCharts实时分析-完全记录(1)

本系列内容:Kafka环境搭建与测试Python生产者/消费者测试Spark接收Kafka消息处理,然后回传到KafkaFlask引入消费者WebSocket实时显示版本:spark-2.4.3-bin-hadoop2.7.tgzkafka_2.11-2.1.0.tgz------------------------第1小节:Kaf…

二十八、PHP框架Laravel学习笔记——模型的关联查询

二.关联查询 前几篇博文,了解了三种基础的关联模型,并简单的进行查询;本节课,我们详细的了解更多的查询方案; //下面两种查询是一样的; $books User::find(19)->book; $books User::fin…

搞懂CRF

文章目录1 前言2 Log-linear model3 MEMM3.1 模型概述3.2 label bias问题4 CRF4.1 模型概述4.2 模型训练4.3 模型解码4.4 小结参考资料1 前言 条件随机场(conditional random field, CRF)是在建立序列模型时的常用模块,它的本质就是描述观测到的序列xˉ\bar{x}xˉ对…

skywalking 安装_SkyWalking全链路追踪利器

随着目前系统架构的复杂度越来越高(中台、微服务),并且线上应用的多级监控覆盖到了通讯、应用处理过程监控并且实现端到端的应用监测,线上性能故障的快速定位修复;而传统的监控分析方式已经无法满足我们的需求,因此许多强大的APM工…

二十九、PHP框架Laravel学习笔记——Debugbar 调试器

二.安装使用 通过 composer 在项目中安装 Debugbar,命令如下: composer require barryvdh/laravel-debugbar 生成一个配置文件,给用户配置,可以根据需求进行配置; php artisan vendor:publish --provider…

论文阅读 - Video Swin Transformer

文章目录1 概述2 模型介绍2.1 整体架构2.1.1 backbone2.1.2 head2.2 模块详述2.2.1 Patch Partition2.2.2 3D Patch Merging2.2.3 W-MSA2.2.4 SW-MSA2.2.5 Relative Position Bias3 模型效果参考资料1 概述 Vision Transformer是transformer应用到图像领域的一个里程碑&#x…

rocketmq queue_RocketMQ 实战(三) - 消息的有序性

■ RocketMQ有序消息的使用1 为什么需要消息的有序性比如用户张三终于挣了一百存在在银行卡里存取款,对应两个异步的短信消息,肯定要保证先存后取吧,不然都没钱怎么发了取钱的消息呢! M1 - 存钱 M2 - 取钱而mq默认发消息到不同q显然是行不通的,会乱序 需要发往同一个q,先进先出…

三十、PHP框架Laravel学习笔记——模型的预加载

一.预加载 预加载,就是解决关联查询中产生的 N1 次查询带来的资源消耗我们要获取所有书籍的作者(或拥有者),普通查询方案如下: //获取所有书籍列表 $books Book::all(); //遍历每一本书 foreach ($books as $book) { //每一本…

论文阅读:Spatial Transformer Networks

文章目录1 概述2 模型说明2.1 Localisation Network2.2 Parameterised Sampling Grid3 模型效果参考资料1 概述 CNN的机理使得CNN在处理图像时可以做到transition invariant,却没法做到scaling invariant和rotation invariant。即使是现在火热的transformer搭建的图…

dataframe 排序_疯狂Spark之DataFrame创建方式详解一(九)

创建DataFrame的几种方式1、读取json格式的文件创建DataFrame注意:1. json文件中的json数据不能嵌套json格式数据。2. DataFrame是一个一个Row类型的RDD,df.rdd()/df.javaRdd()。3. 可以两种方式读取json格式的文件。4. df.show()默认显示前20行数据。5.…

【原】npm 常用命令详解

今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块的朋友不可…

论文阅读 - CRNN

文章目录1 概述2 模型介绍2.1 输入2.2 Feature extraction2.3 Sequence modeling2.4 Transcription2.4.1 训练部分2.4.2 预测部分3 模型效果参考资料1 概述 CRNN(Convolutional Recurrent Neural Network)是2015年华科的白翔老师团队提出的,直至今日,仍…

python easygui_Python里的easygui库

想要用python开发一些简单的图形界面,于是接触了easygui库,由于这是新手教程,我会把它写的尽量简单,希望大家都能看懂。1.msgboxmsgbox( )有一个标题,内容和一个ok键(是可以更改的)。举个例子:import easyg…

recv发送失败 缓冲区太小_从 GFS 失败的架构设计来看一致性的重要性

作者简介 陈东明,饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计以及饿了么基础架 构研发工作。曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统构 建和基础架构的研发经验,善于复杂业务需求下…

好用的记事本_分类记事本软件哪个好用?大家推荐一个苹果手机用的分类记事本便签呗...

随着“互联网”的发展,现在都开始在软件上记事备忘了。那么,都有哪些好用的记事本软件可以选择使用呢?大家在选择记事本软件的时候,都有哪些标准呢?不知道大家的标准是什么,小编有一个不能妥协的标准&#…