设置使用原始数据字段(1.0.8+)

raw("字段名")

在创建数据表格时,如果数据是由模型获取的,且模型中定义了修改器和获取器,那么获取器会起作用,而修改器不起作用。

假设User模型定义了获取器和修改器,以下代码仅作为演示,不需要深究为什么这么写。

// username字段的获取器
public function getUsernameAttr($v)
{
    return "用户:".$v;
}

// username字段的修改器
public function setUsernameAttr()
{
    return 123;
}

创建数据表格

// 数据列表
$data_list = User::where($map)->order("sort,id desc")->paginate();

// 使用ZBuilder快速创建数据表格
return ZBuilder::make("table")
    ->setTableName("admin_user") // 设置数据表名
    ->setSearch(["id" => "ID", "username" => "用户名", "email" => "邮箱"]) // 设置搜索参数
    ->addColumns([ // 批量添加列
        ["id", "ID"],
        ["username", "用户名"],
        ["nickname", "昵称"],
        ["nickname", "昵称", "text.edit"],
        ["email", "邮箱"],
        ["mobile", "手机号"],
        ["create_time", "创建时间", "datetime"],
        ["status", "状态", "switch"],
        ["right_button", "操作", "btn"]
    ])
    ->addTopButtons("add,enable,disable,delete") // 批量添加顶部按钮
    ->addRightButton("custom", $btn_access) // 添加授权按钮
    ->addRightButtons("edit,delete,enable,disable") // 批量添加右侧按钮
    ->setRowList($data_list) // 设置表格数据
    ->fetch(); // 渲染页面

可以看到,由于$data_list使用自定义模型查询的,而且定义了获取器,所以最终显示的用户名,前面会显示‘用户:’。

使用原值显示

有时候,虽然模型中定义了获取器,但我们不希望使用获取器,而是使用字段的原值来显示,或者使用原值来处理数据,那么就需要用到raw()方法,指定某个字段或某些字段使用原值。

// 数据列表
$data_list = User::where($map)->order("sort,id desc")->paginate();

// 使用ZBuilder快速创建数据表格
return ZBuilder::make("table")
    ->setTableName("admin_user") // 设置数据表名
    ->setSearch(["id" => "ID", "username" => "用户名", "email" => "邮箱"]) // 设置搜索参数
    ->addColumns([ // 批量添加列
        ["id", "ID"],
        ["username", "用户名"],
        ["nickname", "昵称"],
        ["nickname", "昵称", "text.edit"],
        ["email", "邮箱"],
        ["mobile", "手机号"],
        ["create_time", "创建时间", "datetime"],
        ["status", "状态", "switch"],
        ["right_button", "操作", "btn"]
    ])
    ->raw("username") // 使用原值
    ->addTopButtons("add,enable,disable,delete") // 批量添加顶部按钮
    ->addRightButton("custom", $btn_access) // 添加授权按钮
    ->addRightButtons("edit,delete,enable,disable") // 批量添加右侧按钮
    ->setRowList($data_list) // 设置表格数据
    ->fetch(); // 渲染页面

由于定义了->raw("username"),最终表格上显示的username字段值将不会再经过获取器,而是直接显示原值。

设置多个字段使用原值

->raw("username,nickname")
或者使用数组
->raw(["username", "nickname"])

使用不存在的字段

如果模型中定义了获取器,并且该字段本身是不存在的,那么也需要用raw()方法设置,才能正常显示。

// username字段的获取器
public function getUsernameAttr($v)
{
    return "用户:".$v;
}

// 定义一个不存在的字段获取器
public function setTestAttr()
{
    return 123;
}
// 数据列表
$data_list = User::where($map)->order("sort,id desc")->paginate();

// 使用ZBuilder快速创建数据表格
return ZBuilder::make("table")
    ->setTableName("admin_user") // 设置数据表名
    ->setSearch(["id" => "ID", "username" => "用户名", "email" => "邮箱"]) // 设置搜索参数
    ->addColumns([ // 批量添加列
        ["id", "ID"],
        ["username", "用户名"],
        ["nickname", "昵称"],
        ["test", "测试"],
        ["nickname", "昵称", "text.edit"],
        ["email", "邮箱"],
        ["mobile", "手机号"],
        ["create_time", "创建时间", "datetime"],
        ["status", "状态", "switch"],
        ["right_button", "操作", "btn"]
    ])
    ->raw("test") // 使用原值
    ->addTopButtons("add,enable,disable,delete") // 批量添加顶部按钮
    ->addRightButton("custom", $btn_access) // 添加授权按钮
    ->addRightButtons("edit,delete,enable,disable") // 批量添加右侧按钮
    ->setRowList($data_list) // 设置表格数据
    ->fetch(); // 渲染页面
文章导航