code: public function createTable($table, $columns, $options = null)
      {
          $sql = $this->db->getQueryBuilder()->createTable($table, $columns, $options);
  
          return $this->setSql($sql)->requireTableSchemaRefresh($table);
      }
docs: Creates a SQL command for creating a new DB table.
  
  The columns in the new table should be specified as name-definition pairs (e.g. 'name' => 'string'),
  where name stands for a column name which will be properly quoted by the method, and definition
  stands for the column type which can contain an abstract DB type.
  The method [[QueryBuilder::getColumnType()]] will be called
  to convert the abstract column types to physical ones. For example, `string` will be converted
  as `varchar(255)`, and `string not null` becomes `varchar(255) not null`.
  
  If a column is specified with definition only (e.g. 'PRIMARY KEY (name, type)'), it will be directly
  inserted into the generated SQL.
  
  @param string $table the name of the table to be created. The name will be properly quoted by the method.
  @param array $columns the columns (name => definition) in the new table.
  @param string $options additional SQL fragment that will be appended to the generated SQL.
  @return $this the command object itself