如何获取带有groupBy和orderBy id的2个表的数据并获取最后插入的数据

问题描述 投票:0回答:1

我正在尝试使用 join 方法从 2 个不同的表中获取数据。我已经创建了一个 Eloquent 程序来实现与

orderBy()
方法完美配合的效果。

现在我只想根据具有相同 Eloquent 方法的列对数据进行分组,但不会返回最新/最后插入的数据。

我的询问如下供您参考,

$def_reminders = Invoice::from('invoices AS inv')
->join('reminders_calendar AS remcal', 'remcal.invoice_id', '=', 'inv.id')
->where([
    'inv.user_id' => 1,
    'inv.is_deleted' => '0',
])
->where('inv.reminder_status', '!=', 'Enabled')
->whereDate('remcal.date_when', '2024-01-03')
->whereIn('remcal.reminder_type', ['InProgress', 'Waiting'])
// ->whereRaw('remcal.id = (select max(`id`) from reminders_calendar)')
->selectRaw('MAX(remcal.id) as remcal_id, remcal.invoice_id AS remcal_invoice_id, remcal.*, inv.*')
->groupBy('remcal.invoice_id')
->orderBy('remcal.id', 'desc')
->get();

每当我发表评论时,

groupBy('remcal.invoice_id')
方法都会正确返回所有数据,并按照最新/最后数据到先前数据的顺序。

在连接查询中使用

groupBy()
orderBy()
方法时,我对从 2 个表获取数据感到有点困惑。

eloquent laravel-9
1个回答
0
投票

终于找到了让它发挥作用的解决方案。当我使用groupBy时,它将指定列中具有相同值的行分组为聚合数据。就我而言,它按

remcal.invoice_id
分组。而且,当我使用
orderBy('remcal.id', 'desc')
时,它会尝试按 remcal 的 id 降序排序。但由于 groupBy,它可能不是在组中选择的最新的
id
,因此我无法获取最新插入的数据。

我的工作代码如下,

$sub = DB::table('reminders_calendar')
->select('invoice_id', DB::raw('MAX(id) as max_id'))
->groupBy('invoice_id');

$def_reminders = DB::table('invoices AS inv')
->joinSub($sub, 'max_remcal', function ($join) {
    $join->on('inv.id', '=', 'max_remcal.invoice_id');
})
->join('reminders_calendar AS remcal', function ($join) {
    $join->on('inv.id', '=', 'remcal.invoice_id')
         ->on('remcal.id', '=', 'max_remcal.max_id');
})
->where([
    'inv.user_id' => 1,
    'inv.is_deleted' => '0',
])
->where('inv.reminder_status', '!=', 'Enabled')
->whereDate('remcal.date_when', '2024-01-03')
->whereIn('remcal.reminder_type', ['InProgress', 'Waiting'])
->select('remcal.*', 'inv.*')
->orderBy('remcal.id', 'desc')
->get();
© www.soinside.com 2019 - 2024. All rights reserved.