Laravel一对多关联数据视图多行表格显示异常求助
解决Laravel中关联模型表格行数缺失问题
你当前的代码只遍历存在关联Issue的Ask,如果某个Ask没有关联任何Issue,内层@foreach($data->issues as $key=>$issue)不会执行,导致该行Ask的数据完全不显示,这就是你目标4行却只得到3行的原因。
方案1:显示所有Ask(无论是否有Issue)
如果需要每个Ask都对应至少一行表格,没有Issue时Issue列留空,修改Blade模板如下:
<tbody> @foreach($datas as $data) {{-- 处理没有Issue的Ask --}} @if($data->issues->isEmpty()) <tr> <td>1</td> <td>{{ $data->id }}</td> <td>{{ $data->created_at->format('Y-m-d') }}</td> <td>{{ $data->created_at->format('H:i:s') }}</td> <td>{{ $data->user->name }}</td> <td>{{ $data->no_of_bags }}</td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> </tr> @else {{-- 遍历有Issue的Ask --}} @foreach($data->issues as $key=>$issue) <tr> <td>{{ $key+1 }}</td> <td>{{ $data->id }}</td> <td>{{ $data->created_at->format('Y-m-d') }}</td> <td>{{ $data->created_at->format('H:i:s') }}</td> <td>{{ $data->user->name }}</td> <td>{{ $data->no_of_bags }}</td> <td>{{ $issue->created_at->format('Y-m-d') }}</td> <td>{{ $issue->created_at->format('H:i:s') }}</td> <td>{{ $issue->no_of_bags }}</td> <td>{{ $issue->user->name }}</td> </tr> @endforeach @endif @endforeach </tbody>
同时优化控制器查询,预加载所有关联模型避免N+1查询问题:
// HomeController $datas = Ask::with(['issues', 'user'])->get(); return view('home', compact('datas'));
方案2:确保所有Ask都关联Issue
如果业务逻辑要求每个Ask必须有至少一个Issue,先检查数据是否存在未关联Issue的Ask,同时确认模型关联定义正确:
// Ask模型 public function issues() { // 若Issue表的外键不是默认的ask_id,需指定第二个参数 return $this->hasMany(Issue::class, 'ask_id'); }
可以通过以下查询快速找出无关联Issue的Ask:
$askWithoutIssues = Ask::doesntHave('issues')->get(); dd($askWithoutIssues); // 查看是否有符合条件的Ask
内容的提问来源于stack exchange,提问作者MD40
相关产品推荐
相关产品推荐

