在我的索引设备刀片中,我有以下几行:
@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');
}
答案 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>