Laravel 5.6。获取每个唯一列键的第一个唯一行(desc和示例更整洁)

时间:2018-04-01 19:45:11

标签: laravel postgresql laravel-eloquent laravel-5.6

我有一个表(简化版)用于记录订单的历史记录:

order_id (NOT unique) | created_at | message

它包含此类记录

1 | 2018-03-01 | Message #1
2 | 2018-03-02 | Message #2
2 | 2018-03-03 | Message #3
1 | 2018-03-04 | Message #4

如何查询我的OrderAttempt模型以接收每个 order_id的唯一记录

2 | 2018-03-01 | Message #3
1 | 2018-03-01 | Message #4

如果需要,我已准备好提供更好的解释/更多细节。

3 个答案:

答案 0 :(得分:1)

试试这个:

$join = OrderAttempt::select('order_id')->selectRaw('MAX(created_at) created_at')  
    ->groupBy('order_id');
$sql = '(' . $join->toSql() . ') latest';
OrderAttempt::join(DB::raw($sql), function($join) {
    $join->on('order_attempts.order_id', 'latest.order_id')
        ->on('order_attempts.created_at', 'latest.created_at');
})->get();

答案 1 :(得分:0)

$orders = OrderAttempt::select('order_id', 'created_at', 'message')->groupBy('order_id')-> sortBy('created_at', 'DESC')->get();

答案 2 :(得分:0)

我通过查询max id与我的客户解决了这个问题。现在它起作用并且适合他的需要。