code: public function up()
      {
          $transaction = $this->db->beginTransaction();
          try {
              if ($this->safeUp() === false) {
                  $transaction->rollBack();
                  return false;
              }
              $transaction->commit();
          } catch (\Exception $e) {
              $this->printException($e);
              $transaction->rollBack();
              return false;
          } catch (\Throwable $e) {
              $this->printException($e);
              $transaction->rollBack();
              return false;
          }
  
          return null;
      }
docs: This method contains the logic to be executed when applying this migration.
  Child classes may override this method to provide actual migration logic.
  @return bool return a false value to indicate the migration fails
  and should not proceed further. All other return values mean the migration succeeds.