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

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

我有两张表:付款表和租户表。付款表有以下列

  • ID

  • 数量

  • 出租方

  • 租给

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

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

在我的控制器中我有

public function index() {

  $payments = Payment::groupBy('tenant_id')->get();

  return view('payments.index')->with('payments',$payments);

}

索引.blade.php


@foreach ($payments as $post)

  {{ $post->id }}

  {{ $post->amount }}

  {{ $post->rent_from }}

  {{ $post->rent_to }}

  {{ $post->tenant['name'] }}

@endforeach    

这显示最旧的记录而不是最新的。如何显示每个租户的最新付款记录 - 每个tenant_id仅显示一条最新付款记录


海绵宝宝撒
浏览 130回答 3
3回答

12345678_0001

您可以通过使用 '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);       }

天涯尽头无女友

以下给出了我需要的输出。有没有更形象的方式来表达这个功能。    {$payments = Payment::whereRaw('id IN (select MAX(id) FROM payments GROUP BY tenant_id)')->get();return view('payments.index')->with('payments',$payments);}

元芳怎么了

latest()是一个函数,它将按照您提供的列按降序排序。 public function index()         {               $payments = Payment::groupBy('tenant_id')->get()->latest('id');               return view('payments.index')->with('payments',$payments);         }
打开App,查看更多内容
随时随地看视频慕课网APP