Jsor\Doctrine\PostGIS\Schema\CreateTableSqlGenerator::getSql PHP 메소드

getSql() 공개 메소드

public getSql ( Doctrine\DBAL\Schema\Table $table, array $columns, array $options = [] )
$table Doctrine\DBAL\Schema\Table
$columns array
$options array
    public function getSql(Table $table, array $columns, array $options = array())
    {
        $spatialGeometryColumns = array();
        if (!$this->isPostGis2) {
            $normalColumns = array();
            foreach ($columns as $name => $columnData) {
                if ('geometry' !== $columnData['type']->getName()) {
                    $normalColumns[$name] = $columnData;
                } else {
                    $spatialGeometryColumns[] = $table->getColumn($name);
                }
            }
            $columns = $normalColumns;
        }
        $spatialIndexes = array();
        if (isset($options['indexes']) && !empty($options['indexes'])) {
            $indexes = array();
            foreach ($options['indexes'] as $index) {
                if (!$index->hasFlag('spatial')) {
                    $indexes[] = $index;
                } else {
                    $spatialIndexes[] = $index;
                }
            }
            $options['indexes'] = $indexes;
        }
        $sql = $this->getCreateTableSQL($table, $columns, $options);
        foreach ($spatialGeometryColumns as $column) {
            $sql = array_merge($sql, $this->spatialColumnSqlGenerator->getSql($column, $table));
        }
        foreach ($spatialIndexes as $index) {
            $sql[] = $this->spatialIndexSqlGenerator->getSql($index, $table);
        }
        return $sql;
    }

Usage Example

 public function onSchemaCreateTable(SchemaCreateTableEventArgs $args)
 {
     $generator = new CreateTableSqlGenerator($args->getPlatform(), $this->schemaManager->isPostGis2());
     $args->addSql($generator->getSql($args->getTable(), $args->getColumns(), $args->getOptions()))->preventDefault();
 }