Laravel groupBy groupBy нужно показывать только последнее значение - PullRequest
0 голосов
/ 11 марта 2020

У меня есть одна таблица с такими значениями:

unidade_id, bloco_id, image_name и version.

Чтобы уменьшить мой индексный просмотр, я пытаюсь показать только последний версия из image_name. Но проблема в том, что ... когда я сгруппировал и упорядочил эти значения, результатом всегда будет первая версия.

Вот мой контроллер:

$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 голосов
/ 11 марта 2020

Попробуйте добавить опцию выбора с агрегацией max \ min:

//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();
0 голосов
/ 11 марта 2020

Tks all, за помощь.

Сергей Работал так:

            $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();
0 голосов
/ 11 марта 2020

В любом случае a result set должно сначала быть assembled, прежде чем оно будет ordered

. Использовать groupBy до orderBy

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