Laravel视图中按created_at排序展示每个candidat最新candidature全量数据的实现方法
实现方案
步骤1:修改Candidat模型,新增最新申请关联
在Candidat模型里新增latestCandidature一对一关联,直接绑定每个候选人的最新一条申请数据:
// Candidat.php 新增方法 public function latestCandidature() { // 默认按created_at倒序取最新,如果你是按date_depot作为提交时间,就改成->latest('date_depot') return $this->hasOne(Candidature::class) ->latest() ->whereNotIn('etat', ['Archivé', 'Refusé']); // 直接在关联里过滤状态,后续不用重复判断 }
步骤2:修改控制器index方法,预加载最新关联
替换原有join写法,用with预加载关联避免N+1性能问题:
public function index() { $candidat = Candidat::with('latestCandidature') ->where('deleted','false') // 筛选出至少有一条符合状态申请的候选人,不需要可以删掉这行 ->whereHas('latestCandidature') ->get(); return view('candidat.liste', compact('candidat')); }
步骤3:修改liste.blade.php视图,直接调用最新关联
删掉原有candidatures循环,直接取latestCandidature的字段即可,增加非空判断避免报错:
@foreach($candidat as $key => $data) <tr> <th>{{ $data->id }}</th> <!-- 其他候选人字段保留 --> @if($data->latestCandidature) <td>{{ $data->latestCandidature->demande }}</td> <td>{{ $data->latestCandidature->date_depot }}</td> <td>{{ $data->latestCandidature->etat }}</td> @else <!-- 无有效申请时的占位,不需要可以删掉 --> <td colspan="3">无有效申请</td> @endif </tr> @endforeach
内容的提问来源于stack exchange,提问作者Jasmine
相关产品推荐
相关产品推荐

