【问题标题】:Database Model returning empty data to Laravel blade apparently, What am I missing?数据库模型显然将空数据返回到 Laravel 刀片,我错过了什么?
【发布时间】:2026-01-15 05:05:02
【问题描述】:

当我将数据库数据返回到刀片 laravel 时,我得到一个空表。

控制器.php

public function showreport($id) 
{   
    $data = Cases::find($id);
    return view('report',['reports'=>$data]);
} 

报表.blade

@foreach($reports as $report)       
    <tr>
        <td>{{$report['id']}}</td>
        <td>{{$report['first_name']}} {{$report['last_name']}}</td>
        <td>{{$report['cnic']}}</td>
        <td>{{$report['area_code']}} {{$report['phone']}}</td>
        <td>{{$report['first_def']}} {{$report['last_def']}}</td>
        <td>{{$report['case_type']}}</td>
    </tr>
    @endforeach

Route.php

Route::get('history/report/{id}', [App\Http\Controllers\CaseController::class, 'showreport'])->name('user')->middleware('auth');

似乎无法解决问题。它很好地呼应了 $data 变量,但它没有在表中显示该行。

【问题讨论】:

  • 你应该得到一个类似Trying to access array offset on value of type bool的错误。它显示任何错误吗??
  • Cases::find($id) 应该返回单个 Cases 对象,而不是可迭代的集合。
  • @zahidhasanemon 不,它没有。只是一张空桌子。
  • 代替find($id)试试where('id', $id)-&gt;get()
  • 如果我没记错的话,find方法返回的对象或对象集合,而不是数组尝试像从对象$report->id e.t.c这样的循环中获取数据

标签: laravel eloquent


【解决方案1】:

find() 方法对于使用其主 ID 值从表中获取单个记录很有用。所以它只返回一条记录而不是数组。如果要获取记录数组,可以使用:

$data = Cases::query()->where('id', $id)->get();

这在逻辑上可能是错误的。因为虽然您总是需要一条记录,但为什么要使用表?

【讨论】:

  • 对于用户而言,每个案例都包含一组详细信息。但是对于管理员来说,他可以一次检索多个用户的案例及其详细信息。
【解决方案2】:

IGP 的建议奏效了。

在控制器中,我将 $data = Cases::find($id) 更改为 $data=Cases::where('id', $id)->get()

【讨论】:

  • 为什么会有超过 1 条具有相同 'id' 的记录?