【问题标题】:How to get an array in laravel query如何在laravel查询中获取数组
【发布时间】:2022-01-03 10:38:04
【问题描述】:

这是我的问题

$bbaplaukts = DB::table('materials')
            ->where('statuss', '=', 'Izlietots')
            ->orwhere('statuss', '=', 'Pasutits')
            ->leftJoin('bbaplaukts', 'materials.scanner_code', '=', 'bbaplaukts.scanner_code')
            ->leftJoin('alternatives', 'materials.id', '=', 'alternatives.material_id')
            ->select(
              'materials.scanner_code as scanner_code',
              'materials.reference as reference',
              'materials.description as description',
              'materials.id as id',
              'bbaplaukts.place as place',
              'alternatives.alternatives as alternatives',
              'alternatives.links as links',
              DB::raw('count(IF(statuss = "Izlietots",bbaplaukts.statuss,null)) as izlietots'),
              DB::raw('count(IF(statuss = "Pasutits",bbaplaukts.statuss,null)) as pasutits'))
            ->groupBy('materials.scanner_code', 'materials.reference', 'materials.description',
             'materials.id', 'bbaplaukts.place', 'alternatives.alternatives', 'alternatives.links')
            ->orderBy('bbaplaukts.place', 'asc')
            ->paginate(15);

这是它返回的结果

#items: array:4 [▼
      0 => {#1303 ▼
        +"scanner_code": "DM DS D2 D0"
        +"reference": "Metāla šķēres 20cm"
        +"description": "Metāla šķēres 20cm"
        +"id": 2
        +"place": "Bbaskapis"
        +"alternatives": "Test123"
        +"links": "Test123"
        +"izlietots": 2
        +"pasutits": 0
      }
      1 => {#1322 ▼
        +"scanner_code": "DM DS D2 D0"
        +"reference": "Metāla šķēres 20cm"
        +"description": "Metāla šķēres 20cm"
        +"id": 2
        +"place": "Bbaskapis"
        +"alternatives": "Test12345"
        +"links": "https://www.google.com/search?client=firefox-b-d&q=talsu+riepas"
        +"izlietots": 2
        +"pasutits": 0
      }

正如您所见,它们几乎相同,只有“替代”和“链接”不同。有没有一种方法可以让查询返回单个条目,但“替代”和“链接”是所有不同条目的数组?

对不起,这个不好的标题,真的想不出办法来表达这个。

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    Laravel 通过Model Relationships 提供了一个最有效的功能来实现这一点。但是,如果您更喜欢使用查询生成器,您可以尝试从主查询中删除“替代”联接并单独进行:

    $bbaplaukts = DB::table('materials')
                ->where('statuss', '=', 'Izlietots')
                ->orwhere('statuss', '=', 'Pasutits')
                ->leftJoin('bbaplaukts', 'materials.scanner_code', '=', 'bbaplaukts.scanner_code')
                ->select(
                  'materials.scanner_code as scanner_code',
                  'materials.reference as reference',
                  'materials.description as description',
                  'materials.id as id',
                  'bbaplaukts.place as place',
                  DB::raw('count(IF(statuss = "Izlietots",bbaplaukts.statuss,null)) as izlietots'),
                  DB::raw('count(IF(statuss = "Pasutits",bbaplaukts.statuss,null)) as pasutits'))
                ->groupBy('materials.scanner_code', 'materials.reference', 'materials.description',
                 'materials.id', 'bbaplaukts.place')
                ->orderBy('bbaplaukts.place', 'asc')
                ->paginate(15);
                
    foreach ($bbaplaukts as $key=>$bbaplaukt){
                $alternatives = DB::table('alternatives')->select('alternatives')->where('material_id', $bbaplaukt->id)->get();
                $links = DB::table('alternatives')->select('links')->where('material_id', $bbaplaukt->id)->get();
                $bbaplaukts[$key]->alternatives = $alternatives;
                $bbaplaukts[$key]->links = $links;
            }
    return  response($bbaplaukts, 200);
    

    【讨论】:

    • 谢谢!!!这正是我想要完成的!将尝试与模型关系进行试验。
    • 很高兴为您提供帮助!
    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 2017-08-30
    • 2015-02-04
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多