【问题标题】:How to filter using eloquent using distinct?如何使用 eloquent 使用 distinct 进行过滤?
【发布时间】:2020-06-24 11:16:15
【问题描述】:

希望得到一些帮助。目前我有一个包含多条记录的表。

列有:id, identifier, price

我想写一个查询,我只能得到最高价格的唯一标识符。

我希望收藏是

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

第一个数组 id 是 5,因为从标识符 1001 开始,最高价格是 50,id 是 5,第二个数组 id 是 7,因为标识符 1002 最高价格是 35

【问题讨论】:

  • 就像:Model::orderBy('price', 'DESC')->get();

标签: laravel eloquent laravel-6


【解决方案1】:
$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
    ]
]

【讨论】:

    【解决方案2】:

    使用它来获取所有具有最高价格的不同标识符(编辑表):

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

    【讨论】:

    • 但这只是获得第一个值。我正在尝试以最高价格获取所有唯一标识符。
    【解决方案3】:

    大家好,找到了更好的解决方案。阅读数据库视图表。此函数将创建一个具有所需值的虚拟表,在 laravel 中,您可以创建一个模型来引用该虚拟表并对其进行雄辩的查询。

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 2020-04-18
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2020-01-06
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多