【问题标题】:How to display the most recent single record in laravel using eloquent如何使用 eloquent 在 laravel 中显示最近的单条记录
【发布时间】:2020-10-17 11:49:48
【问题描述】:

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

我有两个表,一个是 payment 表,一个是 tenants 表。 付款表具有以下列

  • 身份证
  • 金额
  • rent_from
  • rent_to

Payments 表与租户表具有多对一关系。

在我的索引页面中,我希望只显示每个租户的最新付款 (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    

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

【问题讨论】:

    标签: php laravel eloquent eloquent-relationship


    【解决方案1】:

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

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

    【讨论】:

    • 这给出了一个错误。 “使用未定义的常量 id - 假定为 'id'(这将在 PHP 的未来版本中引发错误)”
    • 用引号括起来 latest('id') 或者如果您在表格末尾有一个时间戳列,您可以将其保留在 latest() 而不是 latest(id) 并且默认情况下它会按该列排序.
    • 这仍然给出错误“方法 Illuminate\Database\Eloquent\Collection::latest 不存在。”可能是什么原因
    • 删除 ->get() 它应该可以工作。 $payments = Payment::groupBy('tenant_id')->latest('id');
    【解决方案2】:

    以下为我提供了我需要的输出。有没有更雄辩的方式来表达这个功能。

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

    【讨论】:

      【解决方案3】:

      您可以通过使用带有 orderByDesc 的“hasOne”来创建一个名为“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);
         
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-10
        • 2016-05-04
        • 2018-10-02
        • 2011-12-20
        • 2019-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多