Laravel-admin无参与者时获取event名称报错及event_id获取方法
解决Laravel-admin列表头部报错及获取event_id的问题
一、修复活动无参与者时的报错问题
你遇到的Trying to get property 'event' of non-object错误,本质是当活动没有任何参与者时,$query->first()返回了null,此时调用->event自然会触发这个错误。这里提供两种更稳妥的解决方案:
方案1:直接通过已有的$eventId查询活动(推荐)
既然你已经从路由中拿到了$eventId,完全不需要依赖参与者数据来获取活动名称,直接查询Event模型更高效,也能避免无参与者的情况:
protected function grid() { $grid = new Grid(new Participant); $eventId = request()->route('event'); $grid->model() ->where('event_id', $eventId) ->orderBy('number', 'asc'); // 修改header回调,直接用$eventId查询活动 $grid->header(function ($query) use ($eventId) { // 假设你的Event模型在App\Models目录下,根据实际路径调整 $event = \App\Models\Event::find($eventId); // 处理活动不存在的边界情况(路由校验过的话可以省略,但保险起见加上) $eventName = $event ? $event->name : '未找到对应活动'; return "<div style='background-color:#f7f7f7; font-size: 18px; text-align: center; padding: 7px 10px; margin-top: 0;'>$eventName</div>"; }); // 其他grid配置... $grid->authorized(__('Authorized'))->editable()->sortable(); $grid->number(__('Number'))->sortable(); $grid->driver()->full_name(__('Driver'))->sortable(); $grid->admin_user()->name(__('Author'))->sortable(); $grid->updated_at(__('Updated at'))->sortable(); $grid->disableCreateButton(); $grid->disableFilter(); $grid->disableActions(); $grid->disableExport(); $grid->disableRowSelector(); return $grid; }
方案2:保留参与者查询逻辑,但增加空值判断
如果你坚持要从参与者数据中获取活动信息,一定要先判断$query->first()是否为null:
$grid->header(function ($query) { $participant = $query->first(); // 先检查是否有参与者,再获取活动名称 $eventName = $participant ? $participant->event->name : '该活动暂无参与者'; return "<div style='background-color:#f7f7f7; font-size: 18px; text-align: center; padding: 7px 10px; margin-top: 0;'>$eventName</div>"; });
二、获取event_id列的值
根据你的使用场景,有两种常见的获取方式:
1. 在grid列表中显示event_id列
如果只是要在参与者列表里展示event_id,直接添加一行grid配置即可:
$grid->event_id(__('Event ID'))->sortable();
2. 在回调中获取单个参与者的event_id
比如在行操作回调、自定义列回调中,你可以通过模型实例直接访问event_id属性:
// 示例:在行操作中获取event_id $grid->actions(function ($actions) { $currentEventId = $actions->row->event_id; // 在这里使用$currentEventId做你需要的操作,比如跳转、判断权限等 }); // 示例:在自定义列中获取event_id $grid->column('event_info', __('Event Info'))->display(function () { // $this代表当前的Participant模型实例 return "活动ID:{$this->event_id}"; });
内容的提问来源于stack exchange,提问作者Mendizalea
相关产品推荐
相关产品推荐

