Laravel groupBy groupBy只需要显示最后一个值

时间:2020-03-11 11:54:45

标签: laravel laravel-5 group-by sql-order-by

我有一个表具有以下值:

unidade_id,bloco_id,图片名称和版本。

为缩小索引视图,我试图仅显示image_name的最新版本。但是问题是... 当我将groupBy和orderBy设为此值时,结果始终是第一个版本。

这是我的控制者:

$image_list = Imagem::orderBy('version', 'desc')       
    ->groupBy(['unidade_id', 'bloco_id', 'image_name'])  
    ->get();

我的数据库具有以下示例值:

image_name: Windows10_SalaDeAula | version: 3.0
image_name: Windows10_SalaDeAula | version: 4.0

索引中的结果始终是3.0版本,但是我只需要显示最新版本。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

在任何情况下,assembled必须先为ordered才是groupBy

orderBy之前使用$image_list = groupBy(['unidade_id', 'bloco_id', 'image_name']) ->orderBy('version', 'desc') ->get();

[{
    "createdBy":"Tom"
    "logistics" : 0,
    "paymentStatus" : "Paid",
    "orderAmount" : 5393.75,
    "details" : {
         "street": "S.S road",
         "postCOde": "440111",
    },
    "subOrders" : [
        {
        "name" : "sub Product1",
        "mrp" : 12,
        "details": "desk"
        },
        {
        "name" : "subProduct2",
        "mrp" : 89,
        "details": "chair"
        }
    ]
}]

答案 1 :(得分:0)

尝试添加具有最大\最小聚合的选择选项:

//add all necessary fields for selection
$image_list = Imagem::select(DB::raw('max(version) as version'))
    ->orderBy('version', 'desc')
    ->groupBy(['unidade_id', 'bloco_id', 'image_name'])
    ->get();

答案 2 :(得分:0)

全力以赴,寻求帮助。

Serguey它是这样工作的:

            $image_list = Imagem::select(DB::raw('max(version) as version'),
                DB::raw('max(id) as id'),
                'images.unidade_id as unidade_id',
                'images.bloco_id as bloco_id',
                'images.image_name as image_name')
            ->orderBy('version', 'desc')
            ->groupBy(['unidade_id', 'bloco_id', 'image_name'])
            ->get();