20250412134127_version222.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. use think\facade\Db;
  3. use app\admin\model\CrudLog;
  4. use think\migration\Migrator;
  5. class Version222 extends Migrator
  6. {
  7. /**
  8. * @throws Throwable
  9. */
  10. public function up(): void
  11. {
  12. /**
  13. * 修复附件表 name 字段长度可能不够的问题
  14. */
  15. $attachment = $this->table('attachment');
  16. $attachment->changeColumn('name', 'string', ['limit' => 120, 'default' => '', 'comment' => '原始名称', 'null' => false])->save();
  17. /**
  18. * 用户表
  19. * 1. status 注释优化
  20. * 2. password 增加长度至 password_hash 建议值
  21. * 3. salt 注释中标记废弃待删除
  22. */
  23. $user = $this->table('user');
  24. $user->changeColumn('status', 'string', ['limit' => 30, 'default' => '', 'comment' => '状态:enable=启用,disable=禁用', 'null' => false])
  25. ->changeColumn('password', 'string', ['limit' => 255, 'default' => '', 'comment' => '密码', 'null' => false])
  26. ->changeColumn('salt', 'string', ['limit' => 30, 'default' => '', 'comment' => '密码盐(废弃待删)', 'null' => false])
  27. ->save();
  28. /**
  29. * 管理员表
  30. * 1. status 改为字符串存储
  31. * 2. 其他和以上用户表的改动相同
  32. */
  33. $admin = $this->table('admin');
  34. $admin->changeColumn('status', 'string', ['limit' => 30, 'default' => '', 'comment' => '状态:enable=启用,disable=禁用', 'null' => false])
  35. ->changeColumn('password', 'string', ['limit' => 255, 'default' => '', 'comment' => '密码', 'null' => false])
  36. ->changeColumn('salt', 'string', ['limit' => 30, 'default' => '', 'comment' => '密码盐(废弃待删)', 'null' => false])
  37. ->save();
  38. Db::name('admin')->where('status', '0')->update(['status' => 'disable']);
  39. Db::name('admin')->where('status', '1')->update(['status' => 'enable']);
  40. /**
  41. * CRUD 历史记录表
  42. */
  43. $crudLog = $this->table('crud_log');
  44. if (!$crudLog->hasColumn('comment')) {
  45. $crudLog
  46. ->addColumn('comment', 'string', ['limit' => 255, 'default' => '', 'comment' => '注释', 'null' => false, 'after' => 'table_name'])
  47. ->addColumn('sync', 'integer', ['default' => 0, 'signed' => false, 'comment' => '同步记录', 'null' => false, 'after' => 'fields'])
  48. ->save();
  49. $logs = CrudLog::select();
  50. foreach ($logs as $log) {
  51. if ($log->table['comment']) {
  52. $log->comment = $log->table['comment'];
  53. $log->save();
  54. }
  55. }
  56. }
  57. /**
  58. * 多个数据表的 status 字段类型修改为更合理的类型
  59. */
  60. $tables = ['admin_group', 'admin_rule', 'user_group', 'user_rule', 'security_data_recycle', 'security_sensitive_data', 'test_build'];
  61. foreach ($tables as $table) {
  62. if ($this->hasTable($table)) {
  63. $mTable = $this->table($table);
  64. $mTable->changeColumn('status', 'boolean', ['default' => 1, 'signed' => false, 'comment' => '状态:0=禁用,1=启用', 'null' => false])->save();
  65. // 原状态值兼容至新类型
  66. Db::name($table)->where('status', 1)->update(['status' => 0]);
  67. Db::name($table)->where('status', 2)->update(['status' => 1]);
  68. }
  69. }
  70. }
  71. }