Laravel 基础教程

Laravel 笔记

laravel admin grid 如何针对数组输出列进行映射后标签显示

Laravel 笔记 Laravel 笔记


laravel admin 表单的列显示中,若对应字段列(column)为数组形式,如何将其值与现有的 map 映射值后,多个标签显示?

推荐方式

对展示的列进行自定义函数的 display 后,链式调用用 label,具体代码如下:

$grid->column('prop_ids', '筛选项')->display(function ($prop_ids) {

    $prop_id_map = [
        4 => '项目功效', 5 => '品牌', 13 => '规格', 903 => '仪器', 905 => '药品', 906 => '材料',
    ];
    $prop_ids = array_map(function ($prop_id) use ($prop_id_map) {
        return "{$prop_id_map[$prop_id]}";
    }, $prop_ids);

    return $prop_ids;

})->label();

这里需要注意的是,如上示例中 prop_ids 当前获取的要确保是数组输出,笔者的示例中的 prop_ids 真实字段值是用逗号分隔的字符串形式数据,在从 model 中获取时,做了逗号分隔的数组提取处理,如下:

class XXX extends Model
{
    protected $connection = "xxxx";
    protected $table = "xxxxx";

    ...

    public function getPropIdsAttribute($value)
    {
        return explode(',', $value);
    }

    public function setPropIdsAttribute($value)
    {
        $this->attributes['prop_ids'] = implode(',', $value);
    }
}