laravel - 数据透视表查询
问题描述
我是 Laravel 的新手,我需要一些关于查询的帮助。
我有 3 张桌子:
电缆(belongs_to_many 特征)
特征(belongs_to_many 电缆)
具有枢轴额外字段值的 Cable_Feature(枢轴)
我为每个人创建了一个有关系的模型(一切都很好......)
Table Cables的结构是(Id, Code)
Table Features 的结构是 (Id, Name)
数据透视表 Cable_Feature 的结构是 (cable_id, feature_id, value)
现在我需要构建一个查询(使用 Maatwebsite/Excel 在 Excel 中导出)。我需要每条记录都有:
电缆.代码
特征名称
价值
我能够做到,但我的问题是我需要将所有内容集中在一条线上 ...ES:假设我们有 3 根电缆和 2 个功能。在数据库中
电缆:
(id) 1, (代码) 0031TN
(id) 2, (code) 0042GG
(id) 3, (代码) 0025ZS
特征:
(id) 1, (名称) PVC
(id) 2, (姓名) CM
Cable_Feature 中的情况是:
1 - 1 - 高品质
1 - 2 - 12
2 - 1 - 高品质
2 - 2 - 6
3 - 1 低质量
3 - 2 -11
现在我需要查询这个结果(1代表行)
0031TN - 高品质 - 12
0042GG - 高品质 - 6
0025ZS - 低质量 - 11
解决方案
没有 Laravel 的查询是这样的:
SELECT code,
GROUP_CONCAT(`value`)
FROM cable_feature
JOIN cables
ON cables.id = cable_feature.cable_id
GROUP BY cables.code;
你可以从这里开始使用 Laravel Query Builder 构建它。
请记住,group_concat_max_len
如果您的 group_concat 值增长大于限制,您将需要在 MySQL 中设置 alter 变量。前任:SET SESSION group_concat_max_len = 10000;
推荐阅读
- r - 确定数字是否高度复合
- sql - 可以在 PostgreSQL IN 子句中包含集合吗?
- sql-server - 如何根据 SQL 中某些单词的出现来显示句子或行?
- node.js - NodeJS 承诺 Firebase
- docker - 在 Ubuntu 18 上重新启动后找不到 Docker
- javascript - module.exports 中的 getter 和 es6 样式导入(反应导航器)
- python - 具有所需帧率的 imshow() 与 opencv
- java - Spring Boot 在运行时获取主类的名称
- php - Symfony - 无法运行创建的控制台命令
- c# - 从字符串中获取数字和字符串