Laravel 6获取非对象属性'id'报错,数据无法在datatable和calendar5展示
问题解决:Trying to get property 'id' of non-object
错误根源
你在控制器里生成的$events是关联数组,但Blade模板里误将其当作Eloquent对象,使用了->的属性访问语法,这直接导致了报错。另外模板里用到的部分字段,和控制器数组定义的键名不匹配,还有一些字段根本没在数组里定义。
修复方案
- 改用数组索引访问:把模板里所有
$event->xxx的写法改成$event['xxx'],确保键名和控制器里定义的完全一致。 - 对齐字段键名:控制器里把
booking->name存成了titre,booking->datee存成了start,模板里要对应调整为$event['titre']和$event['start']。 - 补充缺失字段:模板里用到的
user->name和status,控制器数组里没包含这些数据,需要在循环时补充进去。
修正后的代码
EventController.php(补充缺失字段)
$events = array(); // 预加载user关联,避免N+1查询问题 $bookings = Event::with('user')->get(); foreach($bookings as $booking) { $color = null; $events[] = [ 'id' => $booking->id, 'titre' => $booking->name, 'start' => $booking->datee, 'comment' => $booking->comment, 'color' => $color, 'user' => $booking->user, 'status' => $booking->status ]; } $users = User::all(); return view('index')->with([ 'events' => $events, 'users' => $users, ]);
index.blade.php(改用数组访问语法)
<tbody> @foreach($events as $event) <tr id="{{$event['id']}}"> <td><input type="checkbox" class="checkbox" name="customer_id[]" value="{{$event['id']}}" /></td> <td>{{ $event['id'] }}</td> <td>{{ $event['start'] }}</td> <td>{{ $event['titre'] }}</td> <td> {{ $event['comment'] }} <a href="#" target='_blank' class=""> <i class="fas fa-eye"></i></a> </td> <th scope="col">{{ Str::upper($event['user']['name']) }}</th> <td> <span class="badge badge-warning">{{ $event['status'] }}</span> </td> </tr> @endforeach </tbody>
内容的提问来源于stack exchange,提问作者Hajar Lamine
相关产品推荐
相关产品推荐

