三个表的关联中,如何通过第一个表拿到第三个表的数据呢

请教,以下场景,如何从第一个表,拿到第三个表的数据?请教,以下场景,如何从第一个表,拿到第三个表的数据?

我的表是这样的

客户模型 customer
跟进模型 event
联系人模型 contact

一个客户有多个跟进。
一个跟进有一个联系人。

客户表(customers)设计

id name
1 腾讯
2 阿里

跟进表(events)设计

id content(内容) customer_id(所属客户id) contact_id(所属联系人id)
1 跟进内容XXXXXXXX 2 3
2 跟进内容XXXXXXXX 1 2
3 跟进内容XXXXXXXX 1 1
4 跟进内容XXXXXXXX 3 1

联系人表(contacts)设计

id name
1 张三
2 李四

现在需要实现的效果是

在当前客户页面 (已知客户id),显示所有跟进,以及这个跟进关联的联系人的name

客户名称:XXXX
跟进内容1,联系人:张三
跟进内容2,联系人:李四
跟进内容3,联系人:王五

我的关联是这么写的

$customer = Customer::with('events.contact')->findorFail($id);
'events' => $customer->events()->get()

在视图页面是这么调用跟进的

@foreach ($events as $event)
{{$event['content']}}   //(遍历出来每条跟进内容,现在不知道怎么在每条跟进内容后面,把这条跟进的联系人的名称显示出来),联系人的id是 {{$event['contact_id']}}

//笨办法:
{{contact::find( $event['contact_id'] )->name}}
//但是如果这么写的话,每条跟进的联系人都会增加一次查询。不知道怎么写可以减少查询
@endforeach

请问如果使用关联,关联的写法怎么写才能减少查询呢?

乌鸦嘴新手社区 wyz.xyz 为技术新手提供服务
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

已解决,这个案例其实不能用三个表的思路去思考。 可以当成两两关联。 B与A一对多关联。 B与C一对一关联。 虽然是三个表,但如果用三个表的思路去琢磨,很容易掉进坑里。

3年前 评论
讨论数量: 4

远程一对一的你值得看文档

3年前 评论
shebaoting (楼主) 3年前
小学毕业生 (作者) 3年前
shebaoting (楼主) 3年前

已解决,这个案例其实不能用三个表的思路去思考。 可以当成两两关联。 B与A一对多关联。 B与C一对一关联。 虽然是三个表,但如果用三个表的思路去琢磨,很容易掉进坑里。

3年前 评论

感觉你没解决,你这样打印出来里面会多一个 events 字段, events 里面会多一个 contact 字段。

$customer = Customer::findorFail($id);
$customer->load(['events' , 'events.contact']);
dd($customer);

// 列表
Customer::with(['events' , 'events.contact'])->get();
3年前 评论
shebaoting (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!