位置: 编程技术 - 正文

PHP laravel中的多对多关系实例详解(php的lamp)

编辑:rootadmin

推荐整理分享PHP laravel中的多对多关系实例详解(php的lamp),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php laravel框架入门,phpstorm laravel,php lambda,php ladp,php laravel框架优缺点,laravel php artisan,php laravel教程,laravel phpstudy,内容如对您有帮助,希望把文章链接给更多的朋友!

数据表之间是纵横交叉、相互关联的,laravel的一对一,一对多比较好理解,官网介绍滴很详细了,在此我就不赘述啦,重点我记下多对多的关系

一种常见的关联关系是多对多,即表A的某条记录通过中间表C与表B的多条记录关联,反之亦然。比如一个用户有多种角色,反之一个角色对应多个用户。

为了测试该关联关系,我们沿用官网的用户角色示例:

需要三张数据表:users、roles 和 role_user,role_user 表按照关联模型名的字母顺序命名(这里role_user是中间表),并且包含 user_id 和 role_id两个列。

多对多关联通过编写返回 belongsToMany 方法返回结果的方法来定义。废话不说多,直接上数据结构:

1:创建一个角色表roles,并添加一些初始化数据:

2:创建一个角色表roles,并添加一些初始化数据:

3:创建一个中间表role_user用于记录users表与roles表的对应关系,并添加一些初始化数据:

注意我们定义中间表的时候没有在结尾加s并且命名规则是按照字母表顺序,将role放在前面,user放在后面,并且用_分隔,这一切都是为了适应Eloquent模型关联的默认设置:在定义多对多关联的时候如果没有指定中间表,Eloquent默认的中间表使用这种规则拼接出来。

创建一个Role模型:

然后我们在 User 模型上定义 roles 方法:

注:正如我们上面提到的,如果中间表不是role_user,那么需要将中间表作为第二个参数传入belongsToMany方法,如果中间表中的字段不是user_id和role_id,这里我们姑且将其命名为$user_id和$role_id,那么需要将$user_id作为第三个参数传入该方法,$role_id作为第四个参数传入该方法,如果关联方法名不是roles还可以将对应的关联方法名作为第五个参数传入该方法。

接下来我们在控制器中编写测试代码:

当然,和所有其它关联关系类型一样,你可以调用roles 方法来添加条件约束到关联查询上:

正如前面所提到的,为了确定关联关系连接表的表名,Eloquent 以字母顺序连接两个关联模型的名字。不过,你可以重写这种约定 —— 通过传递第二个参数到 belongsToMany 方法:

除了自定义连接表的表名,你还可以通过传递额外参数到 belongsToMany 方法来自定义该表中字段的列名。第三个参数是你定义关联关系模型的外键名称,第四个参数你要连接到的模型的外键名称:

PHP laravel中的多对多关系实例详解(php的lamp)

定义相对的关联关系

要定义与多对多关联相对的关联关系,只需在关联模型中调用一下 belongsToMany 方法即可。我们在 Role 模型中定义 users 方法:

正如你所看到的,定义的关联关系和与其对应的User 中定义的一模一样,只是前者引用 AppModelsRole,后者引用AppModelsUser,由于我们再次使用了 belongsToMany 方法,所有的常用表和键自定义选项在定义与多对多相对的关联关系时都是可用的。

测试代码如下:

正如你看到的,处理多对多关联要求一个中间表。Eloquent 提供了一些有用的方法来与这个中间表进行交互,例如,我们假设 User 对象有很多与之关联的 Role 对象,访问这些关联关系之后,我们可以使用这些模型上的pivot 属性访问中间表字段:

注意我们获取到的每一个 Role 模型都被自动赋上了 pivot 属性。该属性包含一个代表中间表的模型,并且可以像其它 Eloquent 模型一样使用。

默认情况下,只有模型主键才能用在 pivot 对象上,如果你的 pivot 表包含额外的属性,必须在定义关联关系时进行指定:

比如我们修改role_user表增加一个字段 username 数据如下:

修改模型User:

测试代码如下:

如果你想要你的 pivot 表自动包含created_at 和 updated_at 时间戳,在关联关系定义时使用 withTimestamps 方法:

通过中间表字段过滤关联关系

你还可以在定义关联关系的时候使用 wherePivot 和 wherePivotIn 方法过滤belongsToMany 返回的结果集:

测试代码如下:

以上对应输出:

如果你想要你的pivot表自动包含created_at和updated_at时间戳,在关联关系定义时使用withTimestamps方法:

以上所述是小编给大家介绍的PHP laravel中的多对多关系实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对积木网网站的支持!

PHP框架Laravel中实现supervisor执行异步进程的方法 问题描述大家在使用Laravel框架实现动态网页时,若有些操作计算量较大,为了不影响用户体验,往往需要使用异步方式去处理。这里使用supervisor和larave

解决laravel 5.1报错:No supported encrypter found的办法 本文主要介绍了关于解决laravel5.1报错:Nosupportedencrypterfound的办法,分享出来供大家参考学习,下面来看看详细的介绍:问题描述在使用laravel5.1进行项

laravel 5.1下php artisan migrate的使用注意事项总结 PHPartisanmigrate命令是laravel十分重要的问题,但在使用时需要注意几个情况:(1)在migration文件夹下创建一张新的表,要使用phpartisanmake:migration语句phparti

标签: php的lamp

本文链接地址:https://www.jiuchutong.com/biancheng/293211.html 转载请保留说明!

上一篇:PHP框架laravel的.env文件配置教程(php框架yii)

下一篇:PHP框架Laravel中实现supervisor执行异步进程的方法(php框架yii)

  • 年度所得税汇算清缴操作流程
  • 进项税转出的金额含税吗
  • 电动三轮车发票和合格证丢了怎么上牌照
  • 个人独资企业可以核定征收吗
  • 会计凭证审核的主要内容
  • 去年开的专票今年可以作废吗
  • 没有外币账户可以收外币吗
  • 公司开户费用都包括哪些
  • 个税换电脑了还能查到之前的申报记录吗?
  • 期货平仓费用
  • 库存产品亏本销售账务处理
  • 房地产开发公司取名
  • 建筑行业会计如何合理避税
  • 金融债券利息收入免企业所得税吗
  • 增值税进项没收到必须开销项怎么办?
  • 地税印花税怎么算
  • 反倾销税由谁缴纳
  • 存货如何处理才能避税
  • 分配股利在报表中怎么填
  • 银行汇票超期退回怎么办
  • 出口企业取得失业保险
  • 交易性金融资产公允价值变动计入
  • 承兑交单是什么的一种
  • php如何定义一个常量?常量名有哪些命名规则?
  • 建筑公司支付的预付款担保保函费怎么做账?
  • 台式机装win10哪个版本好
  • Win11 Build10.0.22000.51预览版正式推送 (附完整更新日志)
  • quicklylook
  • 如何发放年终奖 一个蒸蒸日上的公司,当
  • 轻资产并购
  • phpqrcode
  • php登录注册
  • vue中遇到的问题
  • 无形资产属于哪一类
  • 国内外人工智能发展现状,及最新的人工智能应用?
  • lvs命令
  • php远程调用
  • 挂靠方项目部账务是否并入被挂靠方公司账务?
  • 仓库折旧会计分录
  • phpcms使用教程
  • 筹建期所得税年度申报如何填列
  • 电子发票开出后如何查看
  • 股权激励税务处理方案
  • 银行对账单由谁负责
  • 企业借款利息计入什么科目
  • 未收到货款但发货怎么办
  • sql模糊查询的关键字是什么
  • 找到一款
  • 年末所得税结转怎么结转
  • 老板自己的钱给公司
  • 公司支票可以转给个人吗
  • 银行收到一笔款项企业尚未入账属于什么情况的未达账项
  • 退客户多余货款怎么处理
  • 预付一年房租收到专票账务处理
  • 公司费用分摊给各部门
  • 会计估计变动怎么处理
  • 买断式回购交易情况
  • 小微企业和小规模纳税人的区别
  • 账实不符怎么调账
  • windows 文件名太长无法删除
  • 硬盘装pe怎么启动
  • win7系统对拷的方法
  • xp无法正常启动怎么办
  • windowsxp如何隐藏文件
  • 在linux操作系统中
  • react常用框架
  • 逐一介绍班子成员表现
  • shell发送报文
  • perl正则表达式
  • javascript的面向对象
  • jquery validate表单校验
  • python中的类怎样理解
  • python线程daemon
  • python 备份文件夹
  • 日本消费税是什么
  • 修改季度申报表
  • 如何认真贯彻落实中央八项规定,切实改进工作作风
  • 太原市地税局各分局局长
  • 微观经济学的十大原理
  • 个人所得税法全文完整版2023个人工薪规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设