只将最近的记录值拉入Laravel中的索引Blade @foreach

时间:2018-03-29 16:13:32

标签: php laravel laravel-5 eloquent

在我的索引设备刀片中,我有以下几行:

            @foreach ($equipment as $equipment)

                 <tr>
                     <td><a href="/origins/{{$equipment['id']}}">{{$equipment['unit_id']}}</a></td>
                      <td>{{$equipment->unit_type}}</td>
                      <td>{{\Crypt::decryptString($equipment->VIN)}}</td>
                     <td>{{\Crypt::decryptString($equipment->licensePlate)}}</td>
                     <td>{{\Crypt::decryptString($equipment->titleNumber)}}</td>
                     <td>{{$equipment->registrations}}</td>
                </tr>

            @endforeach

正如您所看到的,最后一栏引入了#34;注册&#34;。当他们现在坐着时,他们以如下阵列的形式到达:

[{"id":45,"equipmentID":368,"amountDue":"0.00","emissions":0,"createdBy":1,"created_at":null,"updated_at":null,"expirationDate":"2015-05-31"},{"id":63,"equipmentID":368,"amountDue":"0.00","emissions":0,"createdBy":1,"created_at":null,"updated_at":null,"expirationDate":"2014-03-31"},{"id":274,"equipmentID":368,"amountDue":"1594.57","emissions":0,"createdBy":1,"created_at":null,"updated_at":null,"expirationDate":"2012-11-30"}]

我如何对它进行排序,以便记录最近的&#34; expirationDate&#34;首先是日期本身是打印到索引的东西(在上面的例子中,我正在寻找2015-05-31的日期)?

这是通过模型的属性吗?

我目前在两个模型(设备和注册)之间的关系定义如下:

public function registrations()
{
    return $this->hasMany(EquipmentLicense::class,'equipmentID','id');
}

2 个答案:

答案 0 :(得分:1)

由于您只需要最新注册,HasOne关系就足够了:

public function registration()
{
    return $this->hasOne(EquipmentLicense::class,'equipmentID','id')
        ->orderByDesc('expirationDate');
}

然后在您的视图中访问它:

<td>{{$equipment->registration->expirationDate}}</td>

要减少数据库查询的数量,您应该使用eager loading

$equipment = Equipment::with('registration')->get();

答案 1 :(得分:0)

我猜你可以做点什么

<td>{{$equipment->registrations->sortByDesc('expirationDate')->first()}}</td>

但是在您的视图中执行thiis看起来很难看,而且,每行执行此操作会执行1次查询,这可能会导致应用程序变慢。

真的建议看https://laravel.com/docs/5.6/eloquent-relationships#constraining-eager-loads

带有外观的东西

$equipements = Equipment::with("registrations");

foreach($equipements as $equipement){
   $equipement->lastRegistration = $equipement->registrations->sortByDesc('expirationDate')->first();
}

并在您看来,

<td>{{$equipment->lastRegistration ? $equipment->lastRegistration->expirationDate : ''}}</td>