Skip to content

Commit

Permalink
build:升级 topthink/think-migration 依赖
Browse files Browse the repository at this point in the history
  • Loading branch information
build-admin committed Oct 10, 2023
1 parent 8ec2a73 commit bf448b9
Show file tree
Hide file tree
Showing 8 changed files with 179 additions and 199 deletions.
32 changes: 15 additions & 17 deletions app/admin/library/crud/Helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -440,22 +440,18 @@ public static function updateFieldOrder(string $tableName, array $fields, array

$fieldName = in_array($item['type'], ['add-field', 'change-field-name']) ? $item['newName'] : $item['oldName'];

$field = self::searchArray($fields, function ($field) use ($fieldName) {
$field = self::searchArray($fields, function ($field) use ($fieldName) {
return $field['name'] == $fieldName;
});
$dataType = self::analyseFieldDataType($field);
$sql = "ALTER TABLE `$tableName` MODIFY COLUMN `$fieldName` $dataType";

$phinxFieldData = self::getPhinxFieldData($field);

// 字段顺序调整
if ($item['after'] == 'FIRST FIELD') {
// 设为第一个字段
$sql .= ' FIRST';
$phinxFieldData['options']['after'] = MysqlAdapter::FIRST;
} else {
$sql .= " AFTER `{$item['after']}`";
$phinxFieldData['options']['after'] = $item['after'];
}
Db::execute($sql);

// 使用 Phinx 再更新一遍字段,不然字段注释等数据丢失
// think-migration 使用了自行维护的 Phinx,并不支持直接将字段设置为第一个,所以调整排序直接使用 SQL
$phinxFieldData = self::getPhinxFieldData($field);
$table->changeColumn($fieldName, $phinxFieldData['type'], $phinxFieldData['options']);
}
}
Expand Down Expand Up @@ -489,6 +485,7 @@ public static function handleTableDesign(array $table, array $fields): array
$table = TableManager::instance($name, [], false);

// 改名和删除操作优先
$priorityOpt = false;
foreach ($designChange as $item) {

if (!$item['sync']) continue;
Expand All @@ -499,18 +496,19 @@ public static function handleTableDesign(array $table, array $fields): array
}

if ($item['type'] == 'change-field-name') {
$priorityOpt = true;
$table->renameColumn($item['oldName'], $item['newName']);

// 改名后使用 Phinx 再更新一遍字段,不然字段注释等数据丢失
$phinxFieldData = self::getPhinxFieldData(self::searchArray($fields, function ($field) use ($item) {
return $field['name'] == $item['newName'];
}));
$table->changeColumn($item['newName'], $phinxFieldData['type'], $phinxFieldData['options']);
} elseif ($item['type'] == 'del-field') {
$priorityOpt = true;
$table->removeColumn($item['oldName']);
}
}

// 保存需要优先执行的操作,避免先改名再改属性时找不到字段
if ($priorityOpt) {
$table->update();
}

// 修改字段属性和添加字段操作
foreach ($designChange as $item) {

Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"topthink/think-orm": "^3.0",
"topthink/think-multi-app": "^1.0",
"topthink/think-throttle": "v2.0.0",
"topthink/think-migration": "3.0.6",
"topthink/think-migration": "3.1.1",
"phpmailer/phpmailer": "^6.8",
"w7corp/easywechat": "^6.12",
"voku/anti-xss": "^4.1",
Expand Down
320 changes: 160 additions & 160 deletions database/migrations/20230620180908_install.php

Large diffs are not rendered by default.

8 changes: 1 addition & 7 deletions database/migrations/20230620180916_install_data.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,9 @@ class InstallData extends Migrator
{
public string $nowTime = '';

protected function init()
{
parent::init();
$this->nowTime = time();
}

public function up()
{
parent::up();
$this->nowTime = time();
$this->admin();
$this->adminGroup();
$this->adminGroupAccess();
Expand Down
12 changes: 1 addition & 11 deletions database/migrations/20230622221507_version200.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ class Version200 extends Migrator
{
public function up()
{
parent::up();
$admin = $this->table('admin');
if ($admin->hasColumn('loginfailure')) {
// 字段改名
Expand All @@ -17,10 +16,6 @@ public function up()
->renameColumn('lastloginip', 'last_login_ip')
->renameColumn('updatetime', 'update_time')
->renameColumn('createtime', 'create_time')
// 改名后需要重设属性以免部分属性丢失
->changeColumn('login_failure', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '登录失败次数'])
->changeColumn('last_login_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '上次登录时间'])
->changeColumn('last_login_ip', 'string', ['limit' => 50, 'default' => '', 'comment' => '上次登录IP'])
->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间'])
->changeColumn('create_time', 'biginteger', ['after' => 'update_time', 'limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间'])
->save();
Expand Down Expand Up @@ -153,7 +148,7 @@ public function up()
->renameColumn('createtime', 'create_time')
->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间'])
->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间'])
->changeColumn('type', 'enum', ['values' => 'route,menu_dir,menu,nav_user_menu,nav,button', 'default' => 'menu', 'comment' => '类型:route=路由,menu_dir=菜单目录,menu=菜单项,nav_user_menu=顶栏会员菜单下拉项,nav=顶栏菜单项,button=页面按钮']);
->changeColumn('type', 'enum', ['values' => 'route,menu_dir,menu,nav_user_menu,nav,button', 'default' => 'menu', 'comment' => '类型:route=路由,menu_dir=菜单目录,menu=菜单项,nav_user_menu=顶栏会员菜单下拉项,nav=顶栏菜单项,button=页面按钮', 'null' => false]);
if (!$userRule->hasColumn('no_login_valid')) {
$userRule->addColumn('no_login_valid', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '未登录有效:0=否,1=是']);
}
Expand All @@ -176,11 +171,6 @@ public function up()
->renameColumn('jointime', 'join_time')
->renameColumn('updatetime', 'update_time')
->renameColumn('createtime', 'create_time')
->changeColumn('last_login_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '上次登录时间'])
->changeColumn('last_login_ip', 'string', ['limit' => 50, 'default' => '', 'comment' => '上次登录IP'])
->changeColumn('login_failure', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '登录失败次数'])
->changeColumn('join_ip', 'string', ['limit' => 50, 'default' => '', 'comment' => '加入IP'])
->changeColumn('join_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '加入时间'])
->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间'])
->changeColumn('create_time', 'biginteger', ['after' => 'update_time', 'limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间'])
->save();
Expand Down
1 change: 0 additions & 1 deletion database/migrations/20230719211338_version201.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ class Version201 extends Migrator
{
public function up()
{
parent::up();
$user = $this->table('user');
if ($user->hasIndex('email')) {
$user->removeIndexByName('email')
Expand Down
1 change: 0 additions & 1 deletion database/migrations/20230905060702_version202.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ class Version202 extends Migrator
*/
public function up()
{
parent::up();
Db::startTrans();
try {
$dashboardId = Db::name('admin_rule')
Expand Down
2 changes: 1 addition & 1 deletion extend/ba/TableManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ protected static function getDbConfig(): array

$table = Config::get('database.migration_table', 'migrations');

$dbConfig['default_migration_table'] = $dbConfig['table_prefix'] . $table;
$dbConfig['migration_table'] = $dbConfig['table_prefix'] . $table;

return $dbConfig;
}
Expand Down

0 comments on commit bf448b9

Please sign in to comment.