code: protected function parseFields()
      {
          $fields = [];
          $foreignKeys = [];
  
          foreach ($this->fields as $index => $field) {
              $chunks = preg_split('/\s?:\s?/', $field, null);
              $property = array_shift($chunks);
  
              foreach ($chunks as $i => &$chunk) {
                  if (strncmp($chunk, 'foreignKey', 10) === 0) {
                      preg_match('/foreignKey\((\w*)\s?(\w*)\)/', $chunk, $matches);
                      $foreignKeys[$property] = [
                          'table' => isset($matches[1])
                              ? $matches[1]
                              : preg_replace('/_id$/', '', $property),
                          'column' => !empty($matches[2])
                              ? $matches[2]
                              : null,
                      ];
  
                      unset($chunks[$i]);
                      continue;
                  }
  
                  if (!preg_match('/^(.+?)\(([^(]+)\)$/', $chunk)) {
                      $chunk .= '()';
                  }
              }
              $fields[] = [
                  'property' => $property,
                  'decorators' => implode('->', $chunks),
              ];
          }
  
          return [
              'fields' => $fields,
              'foreignKeys' => $foreignKeys,
          ];
      }
docs: Parse the command line migration fields.
  @return array parse result with following fields:
  
  - fields: array, parsed fields
  - foreignKeys: array, detected foreign keys
  
  @since 2.0.7