Как отфильтровать с помощью Eloquent с использованием различных? - PullRequest
1 голос
/ 12 марта 2020

Хотел бы помочь. В настоящее время у меня есть таблица с несколькими записями.

Столбцы имеют: id, identifier, price

Я хотел бы написать запрос, в котором я могу получить уникальный идентификатор только с самой высокой ценой.

enter image description here

Я бы хотел, чтобы коллекция была

[
    [
        'id' => 5,
        'identifier' => 1001
        'price' => 50
    ],
    [
        'id' => 7
        'identifier' => 1002,
        'price' => 35
    ]
]

, первый идентификатор массива равен 5, потому что из идентификатора 1001 самая высокая цена равна 50, а идентификатор равен 5 и идентификатор второго массива равен 7, потому что для идентификатора 1002 самая высокая цена равна 35

Ответы [ 4 ]

3 голосов
/ 12 марта 2020
$maxPrices = Model::select(DB::raw('max(price)'))
             ->groupBy('identifier')->get();

результат запроса: [50, 35]

Model::select()->whereIn('price',$maxPrices)->orderBy('price', 'desc')->get()

результат запроса

[
    [
        'id' => 5,
        'identifier' => 1001
        'price' => 50
    ],
    [
        'id' => 7
        'identifier' => 1002,
        'price' => 35
    ]
]
0 голосов
/ 13 марта 2020

Привет, ребята, нашли лучшее решение. Читайте в таблице просмотра БД. Эта функция создаст виртуальную таблицу с требуемым значением, и в laravel вы можете создать модель для ссылки на эту виртуальную таблицу и выполнения красноречивого запроса к ней.

0 голосов
/ 12 марта 2020

Попробуйте это

Model::select()->orderBy('price', 'desc')->get();

ИЛИ

, если вы хотите сумму

Model::select(DB::raw("SUM(price) as price"))
   ->groupBy('identifier')
   ->get();

Если вы хотите получить максимальную цену от всех, попробуйте это

$maxValue = Model::max('price');

или, если вы хотите использовать запрос базы данных, напишите

$price = DB::table('tablename')->max('price');
0 голосов
/ 12 марта 2020

Используйте это, чтобы получить все различные идентификаторы с максимальной ценой (редактировать таблицу):

$products = DB::table('tbl_products')->groupBy('identifier')->get(['identifier', DB::raw('MAX(price) as price')]);
...