前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >还得再来聊聊Laravel中的对多对模型的一些事

还得再来聊聊Laravel中的对多对模型的一些事

作者头像
无道
发布2019-11-13 16:27:11
发布2019-11-13 16:27:11
1.6K00
代码可运行
举报
文章被收录于专栏:无道编程无道编程
运行总次数:0
代码可运行

前言

之前,在文章:https://cloud.tencent.com/developer/article/1538357 已经发过关于Laravel中的多对多关系了。

但回过头来,过了个把月再去看,我自己都忘了怎么写了。

确实看laravel的中文文档,看得糊里糊涂的。还是得在实践中理解啊。

情景假设

我有一张来源表(referers)来记录href和网页标题title。

还有一张信息表(netDisks)来记录一些东西。

目前需求是信息表里面的多个信息可能同属于来源表中的一条记录。 同样,来源表中的多条信息可能属于信心表中的一条记录。 简言之就是,这是多对多的关系。

细节

新建迁移文件就不说了。

我想说的重点是: 1、来源表和信息表可以没有任何外键约束,意思就是说各建各的,不用考虑外键什么的。 2、这两表没有任何外键关联,如果还要产生关系,那么就要第三张表来帮他们建立联系。

以上两点需要特别理解好


我前面说了,两张表(信息表、来源表)没有任何关系,那么就随便按需求建立就行。

重点是第三张表,第三张表最少需要2个字段:即两张表的外键

注意: 1、你想要有其他字段也行,我们这里讨论最简单的情况。 2、第三张表的命名有要求,主要是Laravel默认情况的关系。看上图: net_disk_referrer是我第三张表的名称,原因是前面两张表是(netDisk,referrer) n在r前面,所以是net_disk_referrer而不是referrer_net_disk 当然,搞不懂默认关系,我们在模型关联的时候指定表明就行。请看下面。

好了,表已经建立完毕 了,该讨论怎么用了。


1、我们已经在来源表(referrers)表建立了一条记录,并且得到了一个id:

代码语言:javascript
代码运行次数:0
复制
$ref = Referrer::create(['href'=>$href,'title'=>$title]);
$id = $ref->id;

2、假设我们在信息表(netDisks)插入了一条记录,得到一个model:

代码语言:javascript
代码运行次数:0
复制
$model = NetDisk::create(['xx'=>$xx]);

那么我们可以使用以下语句建立关系:

说白了,这个建立关系就是在第三张表新增记录

代码语言:javascript
代码运行次数:0
复制
$model->attach([$id]);

所以有几点说明: 1、attach()传入的是id,可以是多个id【数组】。至于能不能传入其他参数,或者有没有其他类似attach作用的方法,我翻遍中文文档和百度,愣是没搞明白。 2、attach要使用,要在模型中定义关联。

如图,如果前面我们 搞不懂第三张表的命名,那么在这里指定即可。也最好指定以下,避免不知道的错误发送。

好了,今天到这里了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 情景假设
  • 细节
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档