首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据透视表的查询

数据透视表的查询
EN

Stack Overflow用户
提问于 2019-08-04 12:26:02
回答 3查看 179关注 0票数 0

我是新来的Laravel公司的,我需要一些关于查询的帮助。

我有三张桌子:

  • 电缆(belongs_to_many特性)
  • 特性(belongs_to_many电缆)
  • 带枢轴的Cable_Feature (枢轴)

我为每个人创建了一个有关系的模型(而且一切都很好.)

  • 表电缆的结构为(Id,代码)
  • 表特征的结构是(Id,名称)
  • 数据透视表Cable_Feature的结构是(cable_id,feature_id,value)

现在我需要构建一个查询(用Maatwebsite/ Excel在Excel中导出)。我需要所有的记录:

  • Cables.Code
  • Feature.Name
  • 价值

,我可以这样做,但我的问题是,我需要在一个线上所有的 ...ES:假设我们有3个电缆和2个特性。在数据库中

电缆:

  • (id) 1,(代码) 0031TN
  • (id) 2,(代码) 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
  • 0025 11低质量-11
EN

回答 3

Stack Overflow用户

发布于 2019-08-04 12:51:27

没有Laravel的查询如下所示:

代码语言:javascript
复制
SELECT code, 
       GROUP_CONCAT(`value`) 
FROM   cable_feature 
       JOIN cables 
         ON cables.id = cable_feature.cable_id 
GROUP  BY cables.code; 

您可以在这里使用构建它。

请记住,如果您的group_concat_max_len值越来越大,那么就需要在MySQL中设置alter group_concat变量。例:SET SESSION group_concat_max_len = 10000;

票数 0
EN

Stack Overflow用户

发布于 2019-08-04 12:56:26

你还没有分享你的模型代码。所以我假设你在你的模型中有这样的关系。我使用的是电缆型号

代码语言:javascript
复制
public function features()
{
    return $this->belongsToMany('App\Feature')
        ->withPivot('value');
}

现在在你的控制器里

代码语言:javascript
复制
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

            }
        }
    }

你也可以在你的刀刃上这样做。

票数 0
EN

Stack Overflow用户

发布于 2019-08-05 09:33:44

首先,谢谢你对我的帮助。

说明:我用意大利语写过(Cavi =线缆,特点= Caratteristiche)

我已经解决了一点代码,但我认为不是一个好的超优雅的解决方案(但工作;)

Maatwebsite/Excel包使您能够构建要导出的$data。我已经建立了所有这样的:

代码语言:javascript
复制
$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',
            ];
        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57346546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档