Tablemake.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace addons\tablemake;
  3. use app\common\library\Menu;
  4. use think\Addons;
  5. use think\Config;
  6. use think\Db;
  7. use think\Exception;
  8. /**
  9. * 自建表管理插件
  10. */
  11. class Tablemake extends Addons {
  12. /**
  13. * 插件安装方法
  14. * @return bool
  15. */
  16. public function install() {
  17. $menu = [
  18. [
  19. 'name' => 'tablemake',
  20. 'title' => '自建表管理',
  21. 'icon' => 'fa fa-cubes',
  22. 'sublist' => [
  23. ['name' => 'tablemake/index', 'title' => '查看列表'],
  24. ['name' => 'tablemake/add', 'title' => '创建新表'],
  25. ['name' => 'tablemake/edit', 'title' => '编辑表'],
  26. ['name' => 'tablemake/del', 'title' => '删除模块'],
  27. ['name' => 'tablemake/fields', 'title' => '字段管理'],
  28. ['name' => 'tablemake/field_add', 'title' => '添加字段'],
  29. ['name' => 'tablemake/field_del', 'title' => '删除字段'],
  30. ]
  31. ]
  32. ];
  33. Menu::create($menu);
  34. //$this->doUpgrade();
  35. return true;
  36. }
  37. /**
  38. * 插件卸载方法
  39. * @return bool
  40. */
  41. public function uninstall() {
  42. Menu::delete('tablemake');
  43. return true;
  44. }
  45. /**
  46. * 插件启用方法
  47. * @return bool
  48. */
  49. public function enable() {
  50. Menu::enable('tablemake');
  51. //$this->doUpgrade();
  52. return true;
  53. }
  54. /**
  55. * 插件禁用方法
  56. * @return bool
  57. */
  58. public function disable() {
  59. Menu::disable('tablemake');
  60. return true;
  61. }
  62. public function doUpgrade() {
  63. $prefix = Config::get('database.prefix');
  64. $haTable = Db::query('SHOW TABLES LIKE '."'{$prefix}tablemake_tables'");
  65. if(!$haTable){
  66. //数据表不存在,表示是安装动作,非升级动作
  67. return;
  68. }
  69. //<editor-fold desc="1.0.7版本更新数据表字段" defaultstate="collapsed">
  70. /**
  71. * 1.检测tablemake_tables表是否需要更新,如果需要则更新tablemake_tables表
  72. */
  73. $sql = "describe `{$prefix}tablemake_tables` `weigh`;";
  74. $has_weigh = Db::query($sql);
  75. if (!$has_weigh) {//tablemake_tables
  76. Db::startTrans();
  77. try {
  78. //1.新增weigh字段
  79. $sql = "ALTER TABLE `{$prefix}tablemake_tables`
  80. ADD COLUMN `weigh` bigint(11) NOT NULL DEFAULT 0 COMMENT '排序权重' AFTER `desc`;";
  81. Db::execute($sql);
  82. //2.更新weigh字段的值为对应记录的ID值
  83. $sql = "UPDATE `{$prefix}tablemake_tables` SET `weigh`=`id`;";
  84. Db::execute($sql);
  85. //3.原有字段更新
  86. $sql = "ALTER TABLE `{$prefix}tablemake_tables`
  87. MODIFY COLUMN `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID' FIRST ,
  88. MODIFY COLUMN `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '自建表名称' AFTER `id`,
  89. MODIFY COLUMN `table` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '自建表表名' AFTER `name`,
  90. MODIFY COLUMN `desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '自建表简介' AFTER `table`,
  91. MODIFY COLUMN `createtime` bigint(11) NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `weigh`,
  92. MODIFY COLUMN `updatetime` bigint(11) NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `createtime`;";
  93. Db::execute($sql);
  94. Db::commit();
  95. } catch (Exception $e) {
  96. \think\Log::write("更新{$prefix}tablemake_tables表字段失败,异常:" . $e->getTraceAsString());
  97. Db::rollback();
  98. }
  99. }
  100. /**
  101. * 2.检测tablemake_fields表是否需要更新,如果需要则更新tablemake_fields表
  102. */
  103. $sql = "describe `{$prefix}tablemake_fields` `weigh`;";
  104. $has_weigh = Db::query($sql);
  105. if (!$has_weigh) {//tablemake_fields
  106. Db::startTrans();
  107. try {
  108. //1.新增weigh字段
  109. $sql = "ALTER TABLE `{$prefix}tablemake_fields`
  110. ADD COLUMN `desc` varchar(255) NOT NULL DEFAULT '' COMMENT '字段备注' AFTER `comment`,
  111. ADD COLUMN `weigh` bigint(11) NOT NULL DEFAULT 0 COMMENT '排序权重' AFTER `desc`;";
  112. Db::execute($sql);
  113. //2.更新weigh字段的值为对应记录的ID值
  114. $sql = "UPDATE `{$prefix}tablemake_fields` SET `weigh`=`id`;";
  115. Db::execute($sql);
  116. //3.原有字段更新
  117. $sql = "ALTER TABLE `{$prefix}tablemake_fields`
  118. MODIFY COLUMN `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID' FIRST ,
  119. MODIFY COLUMN `mid` bigint(11) NOT NULL DEFAULT 0 COMMENT '所属自建表ID' AFTER `id`,
  120. MODIFY COLUMN `length` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 0 COMMENT '字段长度' AFTER `type`,
  121. MODIFY COLUMN `default` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '默认值' AFTER `length`,
  122. MODIFY COLUMN `comment` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '字段备注' AFTER `default`,
  123. MODIFY COLUMN `createtime` bigint(11) NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `weigh`,
  124. MODIFY COLUMN `updatetime` bigint(11) NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `createtime`;";
  125. Db::execute($sql);
  126. Db::commit();
  127. } catch (Exception $e) {
  128. \think\Log::write("更新{$prefix}tablemake_fields表字段失败,异常:" . $e->getTraceAsString());
  129. Db::rollback();
  130. }
  131. }
  132. //</editor-fold>
  133. }
  134. }