如何使用eloquent显示laravel中的最近单条记录

How to display the most recent single record in laravel using eloquent

如何使用 eloquent 在 laravel 中显示最近的单个记录 我在下面显示的解决方案仅显示数据库中最旧的记录而不是最新的。

我有两个 table 付款 table 和租户 table。 付款 table 有以下列

付款 table 与租户 table 具有多对一关系。

在我的索引页面中,我希望只显示每个租户的最新付款 (tenant_id)

在我的控制器中我有

public function index() {
  $payments = Payment::groupBy('tenant_id')->get();
  return view('payments.index')->with('payments',$payments);
}

index.blade.php

@foreach ($payments as $post)
  {{ $post->id }}
  {{ $post->amount }}
  {{ $post->rent_from }}
  {{ $post->rent_to }}
  {{ $post->tenant['name'] }}
@endforeach    

这里显示的是最早的记录,而不是最新的。我如何显示每个租户的最新付款记录 - 每个 tenant_id

只有一个最近的付款记录

您可以使用 'hasOne' 和 orderByDesc 建立一个名为 'lastPayment' 的新关系以获得最后一笔付款....

class Tenant extends Model
{
public function lastPayment()
{
 return $this->hasOne(Payment::class,'tenant_id')->orderByDesc('payments.id');
}
}

 public function index()
    {
 $tenants= Tenant ::with('lastPayment')->get();
return view('payments.index')->with('tenants',$tenants);
   
    }

latest() 是一个函数,它将按您提供的列降序排序。

 public function index()
         {
               $payments = Payment::groupBy('tenant_id')->get()->latest('id');
               return view('payments.index')->with('payments',$payments);
         }

下面给出了我需要的输出。有没有更多的eloquent表达这个功能的方式。

    {
$payments = Payment::whereRaw('id IN (select MAX(id) FROM payments GROUP BY tenant_id)')->get();
return view('payments.index')->with('payments',$payments);}