我是Laravel的新手,我需要一些查询帮助。
我有3张桌子:
电缆(属于许多功能)
功能(属于许多电缆)
带有枢轴额外字段 value
我为每个人创建了一个具有关系(并且一切正常...)
工作台电缆的结构是(Id,Code)
表功能的结构为(标识,名称)
数据透视表Cable_Feature的结构为(cable_id,feature_id,值)
现在,我需要构建一个查询(使用Maatwebsite / Excel在Excel中导出)。我需要每条记录都有:
电缆。代码
Feature.Name
值
我能够做到,但是我的问题是我需要将所有东西都放在一条线上 ... ES:假设我们有3条电缆和2个功能部件。在数据库中
电缆:
(id)1,(代码)0031TN
(id)2,(代码)0042GG
(id)3,(代码)0025ZS
功能:
(id)1,(名称)PVC
(id)2,(name)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
答案 0 :(得分:0)
没有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值大于限制,则需要在MySQL中设置alter group_concat_max_len
变量。
例如:SET SESSION group_concat_max_len = 10000;
答案 1 :(得分:0)
您尚未共享模型代码。因此,我假设您的一个模型中具有这样的关系。我正在使用电缆模型
public function features()
{
return $this->belongsToMany('App\Feature')
->withPivot('value');
}
现在在您的控制器中
public function getAll()
{
$cables = Cable::all();
foreach ($cables as $cable)
foreach ($cable->features $feature)
{
echo $cable->code; //this is from the cable table
echo $feature->name; //this is from the feature table
echo $feature->pivot->value; //this is coming from the pivot table
}
}
}
您也可以在刀片中执行此操作。
答案 2 :(得分:0)
首先感谢您为我提供的帮助。
说明:我用意大利语写过(Cavi =电缆|功能= Caratteristiche)
我已经解决了一些代码,但是我认为这不是一个很好的超级优雅的解决方案(但是可以工作;))
Maatwebsite / Excel软件包使您能够构建$ data进行导出。我已经建立了所有东西:
$cavi = Cavo::with('famiglia', 'caratteristiche')->get();
return $cavi->map(function($cavo) {
foreach ($cavo->caratteristiche as $caratteristica) {
if($caratteristica->id == 5 || $caratteristica->id == 7) {
$caratteristicheCavo[] = $caratteristica->pivot->valore;
}
}
return $datiEplanArray = [
'ParNumber' => "AGE" . $cavo->codice_articolo,
'TypeNumber' => $cavo->famiglia->codice_articolo,
'OrderNumber' => $cavo->codice_articolo,
'Designation EN' => $cavo->famiglia->nome,
'Description EN' => $cavo->famiglia->descrizione,
'Document/Link 1' => '/ita/pdf/' . $cavo->famiglia->codice_articolo . '.pdf',
'Description Doc. 1 EN' => '/en//pdf/' . $cavo->famiglia->codice_articolo . '.pdf',
'ExternalDiameter / ND' => $caratteristicheCavo[1],
'Connections / Number ' => $caratteristicheCavo[0],
'Cable type' => $cavo->famiglia->nome,
'PreviewPicture' => '/immagini/' . $cavo->famiglia->immagine,
'EDP catalogue structure level 1 EN' => 'Cavo',
];
});