Upgrade.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace app\admin\command;
  3. use think\console\Command;
  4. use think\console\Input;
  5. use think\Db;
  6. use think\console\Output;
  7. use app\common\controller\Version;
  8. class Upgrade extends Command
  9. {
  10. protected function configure()
  11. {
  12. $this->setName('upgrade')->setDescription('Version upgrades');
  13. }
  14. protected function execute(Input $input, Output $output)
  15. {
  16. // 旧版本号
  17. $version = DB::table('version')->where('id',1)->field('version')->find();
  18. // 新版本号
  19. $oldversion = Version::getVersion();
  20. $output->writeln($version);
  21. if($version['version'] < $oldversion){
  22. $output->writeln('存在版本差异');
  23. $errarr = array();
  24. $ver = '';
  25. // 新版本大于旧版本
  26. for($version['version'];$version['version'] < $oldversion;$version['version']++){
  27. $name = "Version".$version['version'];
  28. $output->writeln("版本更新中...");
  29. if(file_exists(__DIR__."\\..\\..\\common\\versionsql\\".$name)){
  30. $info = file_get_contents(__DIR__."\\..\\..\\common\\versionsql\\".$name);
  31. if(empty($info)){
  32. $output->writeln("找到版本文件");
  33. continue;
  34. }else{
  35. $output->writeln("\033[31m 没有找到对应文件 \033[0m");
  36. }
  37. $sqlarr = explode(';',$info);
  38. foreach ($sqlarr as $k => $v) {
  39. if(empty($v)){
  40. continue;
  41. }
  42. $output->writeln("执行版本文件");
  43. try{
  44. $result = DB::execute($v);
  45. if($result == 0){
  46. // 执行成功
  47. $output->writeln("执行成功,版本");
  48. }else{
  49. $errarr[] = $v;
  50. $output->writeln("\033[31m 执行失败 \033[0m");
  51. }
  52. }catch(\Exception $e){
  53. $output->writeln("\033[31m SQL错误,".$e->getMessage()." \033[0m");
  54. }
  55. }
  56. }else{
  57. $output->writeln("\033[31m 未找到版本更新文件 \033[0m");
  58. }
  59. $ver = $oldversion;
  60. }
  61. if(empty($errarr)){
  62. // 没有执行错误
  63. // 数据库版本更新
  64. DB::table('version')->where('id',1)->update(['version'=>$ver]);
  65. }else{
  66. $output->writeln("\033[31m $errarr \033[0m");
  67. }
  68. }
  69. }
  70. }