提问者:小点点

根据这些元素之间的条件从雄辩查询中删除元素


我有一个雄辩的要求:

HealthItem::where('person_id', 1)
        ->orderBy('name', 'ASC')
        ->orderBy('date_in', 'DESC')
        ->get();

它返回如下结果:

[
{
    "id": 26,
    "name": "Test 1",
    "date_in": "2020-06-24",
    "date_end": "2020-09-24",
},
{
    "id": 27,
    "name": "Test 1",
    "date_in": "2020-05-19",
    "date_end": "2020-09-24",
},
{
    "id": 28,
    "name": "Test 2",
    "date_in": "2020-09-19",
    "date_end": "2020-09-24",
},
{
    "id": 32,
    "name": "Test 3",
    "date_in": "2020-09-19",
    "date_end": "2020-09-24",
}
]

我只想保留最近日期date_in的不同项。 例如,使用date_in=2020-06-24保留test1,并从结果中删除所有旧的test1(这里是使用date_in=2020-05-19)

显然,这是一个例子。 可以有5个或更多的test1,但我总是保留最近的date_in

有可能做到这一点吗?


共1个答案

匿名用户

您需要使用distinction ;方法。

HealthItem::where('person_id', 1)
        ->distinct('name')
        ->orderBy('name', 'ASC')
        ->orderBy('date_in', 'DESC')
        ->get();

检查文档