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

raw('字段名')

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

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

  1. // username字段的获取器
  2. public function getUsernameAttr($v)
  3. {
  4. return '用户:'.$v;
  5. }
  6. // username字段的修改器
  7. public function setUsernameAttr()
  8. {
  9. return 123;
  10. }

创建数据表格

  1. // 数据列表
  2. $data_list = User::where($map)->order('sort,id desc')->paginate();
  3. // 使用ZBuilder快速创建数据表格
  4. return ZBuilder::make('table')
  5. ->setTableName('admin_user') // 设置数据表名
  6. ->setSearch(['id' => 'ID', 'username' => '用户名', 'email' => '邮箱']) // 设置搜索参数
  7. ->addColumns([ // 批量添加列
  8. ['id', 'ID'],
  9. ['username', '用户名'],
  10. ['nickname', '昵称'],
  11. ['nickname', '昵称', 'text.edit'],
  12. ['email', '邮箱'],
  13. ['mobile', '手机号'],
  14. ['create_time', '创建时间', 'datetime'],
  15. ['status', '状态', 'switch'],
  16. ['right_button', '操作', 'btn']
  17. ])
  18. ->addTopButtons('add,enable,disable,delete') // 批量添加顶部按钮
  19. ->addRightButton('custom', $btn_access) // 添加授权按钮
  20. ->addRightButtons('edit,delete,enable,disable') // 批量添加右侧按钮
  21. ->setRowList($data_list) // 设置表格数据
  22. ->fetch(); // 渲染页面

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

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

使用原值显示

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

  1. // 数据列表
  2. $data_list = User::where($map)->order('sort,id desc')->paginate();
  3. // 使用ZBuilder快速创建数据表格
  4. return ZBuilder::make('table')
  5. ->setTableName('admin_user') // 设置数据表名
  6. ->setSearch(['id' => 'ID', 'username' => '用户名', 'email' => '邮箱']) // 设置搜索参数
  7. ->addColumns([ // 批量添加列
  8. ['id', 'ID'],
  9. ['username', '用户名'],
  10. ['nickname', '昵称'],
  11. ['nickname', '昵称', 'text.edit'],
  12. ['email', '邮箱'],
  13. ['mobile', '手机号'],
  14. ['create_time', '创建时间', 'datetime'],
  15. ['status', '状态', 'switch'],
  16. ['right_button', '操作', 'btn']
  17. ])
  18. ->raw('username') // 使用原值
  19. ->addTopButtons('add,enable,disable,delete') // 批量添加顶部按钮
  20. ->addRightButton('custom', $btn_access) // 添加授权按钮
  21. ->addRightButtons('edit,delete,enable,disable') // 批量添加右侧按钮
  22. ->setRowList($data_list) // 设置表格数据
  23. ->fetch(); // 渲染页面

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

设置多个字段使用原值

  1. ->raw('username,nickname')
  2. 或者使用数组
  3. ->raw(['username', 'nickname'])

使用不存在的字段

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

  1. // username字段的获取器
  2. public function getUsernameAttr($v)
  3. {
  4. return '用户:'.$v;
  5. }
  6. // 定义一个不存在的字段获取器
  7. public function getTestAttr()
  8. {
  9. return 123;
  10. }
  1. // 数据列表
  2. $data_list = User::where($map)->order('sort,id desc')->paginate();
  3. // 使用ZBuilder快速创建数据表格
  4. return ZBuilder::make('table')
  5. ->setTableName('admin_user') // 设置数据表名
  6. ->setSearch(['id' => 'ID', 'username' => '用户名', 'email' => '邮箱']) // 设置搜索参数
  7. ->addColumns([ // 批量添加列
  8. ['id', 'ID'],
  9. ['username', '用户名'],
  10. ['nickname', '昵称'],
  11. ['test', '测试'],
  12. ['nickname', '昵称', 'text.edit'],
  13. ['email', '邮箱'],
  14. ['mobile', '手机号'],
  15. ['create_time', '创建时间', 'datetime'],
  16. ['status', '状态', 'switch'],
  17. ['right_button', '操作', 'btn']
  18. ])
  19. ->raw('test') // 使用原值
  20. ->addTopButtons('add,enable,disable,delete') // 批量添加顶部按钮
  21. ->addRightButton('custom', $btn_access) // 添加授权按钮
  22. ->addRightButtons('edit,delete,enable,disable') // 批量添加右侧按钮
  23. ->setRowList($data_list) // 设置表格数据
  24. ->fetch(); // 渲染页面