You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:42:39