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

无道 2019-09-29 0 条评论 编程相关 阅读125 手机阅读

前言

之前,在文章:https://www.misiyu.cn/article/58.html 已经发过关于Laravel中的多对多关系了。

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

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

情景假设

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

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

目前需求是信息表里面的多个信息可能同属于来源表中的一条记录。

同样,来源表中的多条信息可能属于信心表中的一条记录。

简言之就是,这是多对多的关系。

细节

新建迁移文件就不说了。

我想说的重点是:

1、来源表和信息表可以没有任何外键约束,意思就是说各建各的,不用考虑外键什么的。

2、这两表没有任何外键关联,如果还要产生关系,那么就要第三张表来帮他们建立联系。

以上两点需要特别理解好


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

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

截图-1569725314

注意:

1、你想要有其他字段也行,我们这里讨论最简单的情况。

2、第三张表的命名有要求,主要是Laravel默认情况的关系。看上图:

net_disk_referrer是我第三张表的名称,原因是前面两张表是(netDisk,referrer)

n在r前面,所以是net_disk_referrer而不是referrer_net_disk

当然,搞不懂默认关系,我们在模型关联的时候指定表明就行。请看下面。

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


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

$ref = Referrer::create(['href'=>$href,'title'=>$title]);
$id = $ref->id;

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

$model = NetDisk::create(['xx'=>$xx]);

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

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

$model->attach([$id]);

所以有几点说明:

1、attach()传入的是id,可以是多个id【数组】。至于能不能传入其他参数,或者有没有其他类似attach作用的方法,我翻遍中文文档和百度,愣是没搞明白。

2、attach要使用,要在模型中定义关联。

截图-1569726115

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

截图-1569726307

好了,今天到这里了。

全文完 [
有帮助?打赏
支付宝打赏
微信打赏
]
修改: 2019-09-29 11:05
这篇文章还没有评论呢~
点击刷新/生成验证码
It's me
昵称:无道
坐标:成都
性别:
一个人,一介学生,一个儿子~ 愿你我都被世界温暖以待
迷思爱 公众号

新建了个公众号,会不定期分享一些小玩意,有提升效率的办公软件、有一些黑科技的软件、或教程等等。

爷~,要不关注下~~