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

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

我的表是这样的

客户模型 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 来玩。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

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

4年前 评论
讨论数量: 4

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

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

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

4年前 评论

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

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

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

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