webman-admin如何自定义查询结果(字段值转化)

joytom

现有学生表管理:

截图

这是显示接口返回的数据:

截图

我想要实现的是:比如这个班级id,我想给转化成班级名称,我可能要拿id去查班级表查班级名称。

再举个例子:比如这个分数,我不想让他显示实际分数,大于等于60分显示合格,否则显示不合格。

如果在fastadmin中,我会重写这个查询方法,并进行 foreach 判断处理,但是在 webmanadmin中,不知道咋实现。

这是官方的查询方法:

截图

难道要这样吗?没大看懂源码,请大佬们指点一二,以解小弟之疑

截图

116 2 0
2个回答

walkor 打赏

webman-admin也一样,重写select或者doFomart方法

chao

webman中的doFormat中有一个user_func:afterQuery,用这个就很方便做。

protected function doFormat($query, $format, $limit): Response
{
    $methods = [
        'select' => 'formatSelect',
        'tree' => 'formatTree',
        'table_tree' => 'formatTableTree',
        'normal' => 'formatNormal',
    ];
    $paginator = $query->paginate($limit);
    $total = $paginator->total();
    $items = $paginator->items();
    if (method_exists($this, "afterQuery")) {
        $items = call_user_func([$this, "afterQuery"], $items);
    }
    $format_function = $methods[$format] ?? 'formatNormal';
    return call_user_func([$this, $format_function], $items, $total);
}

示例:

// 查询后处理
protected function afterQuery($items) 
{
    $dictData = (array)Dict::get('endpoint_category');
    $cateDic = array_column($dictData, 'name', 'value');

    $ruleDic = Rule::pluck('name', 'id');
    foreach ($items as $key => $item) {
        $items[$key]['cid_text'] = $cateDic[$item['cid']] ?? '';
        $items[$key]['rule_text'] = $ruleDic[$item['alarm_rule_id']] ?? '--';
    }
    return $items;
}
×
🔝