Spot\Adapter\Mysql::migrateSyntaxTableCreate PHP Метод

migrateSyntaxTableCreate() публичный Метод

Syntax for CREATE TABLE with given fields and column syntax
public migrateSyntaxTableCreate ( string $table, array $formattedFields, array $columnsSyntax, array $options ) : string
$table string Table name
$formattedFields array Array of fields with all settings
$columnsSyntax array Array of SQL syntax of columns produced by 'migrateSyntaxFieldCreate' function
$options array Options that may affect migrations or how tables are setup
Результат string SQL syntax
    public function migrateSyntaxTableCreate($table, array $formattedFields, array $columnsSyntax, array $options)
    {
        $options = $this->formatMigrateOptions($options);
        // Begin syntax soup
        $syntax = "CREATE TABLE IF NOT EXISTS `" . $table . "` (\n";
        // Columns
        $syntax .= implode(",\n", $columnsSyntax);
        // Keys...
        $ki = 0;
        $tableKeys = array('primary' => array(), 'unique' => array(), 'index' => array());
        $fulltextFields = array();
        $usedKeyNames = array();
        foreach ($formattedFields as $fieldName => $fieldInfo) {
            // Determine key field name (can't use same key name twice, so we have to append a number)
            $fieldKeyName = $fieldName;
            while (in_array($fieldKeyName, $usedKeyNames)) {
                $fieldKeyName = $fieldName . '_' . $ki;
            }
            // Key type
            if ($fieldInfo['primary']) {
                $tableKeys['primary'][] = $fieldName;
            }
            if ($fieldInfo['unique']) {
                if (is_string($fieldInfo['unique'])) {
                    // Named group
                    $fieldKeyName = $fieldInfo['unique'];
                }
                $tableKeys['unique'][$fieldKeyName][] = $fieldName;
                $usedKeyNames[] = $fieldKeyName;
            }
            if ($fieldInfo['index']) {
                $fieldKeyName = $fieldName;
                if (is_string($fieldInfo['index'])) {
                    // Named group
                    $fieldKeyName = $fieldInfo['index'];
                }
                $tableKeys['index'][$fieldKeyName][] = $fieldName;
                $usedKeyNames[] = $fieldKeyName;
            }
            // FULLTEXT search
            if ($fieldInfo['fulltext']) {
                $fulltextFields[] = $fieldName;
            }
        }
        // FULLTEXT
        if ($fulltextFields) {
            // Ensure table type is MyISAM if FULLTEXT columns have been specified
            if ('myisam' !== strtolower($options['engine'])) {
                $options['engine'] = 'MyISAM';
            }
            $syntax .= "\n, FULLTEXT(`" . implode('`, `', $fulltextFields) . "`)";
        }
        // PRIMARY
        if ($tableKeys['primary']) {
            $syntax .= "\n, PRIMARY KEY(`" . implode('`, `', $tableKeys['primary']) . "`)";
        }
        // UNIQUE
        foreach ($tableKeys['unique'] as $keyName => $keyFields) {
            $syntax .= "\n, UNIQUE KEY `" . $keyName . "` (`" . implode('`, `', $keyFields) . "`)";
        }
        // INDEX
        foreach ($tableKeys['index'] as $keyName => $keyFields) {
            $syntax .= "\n, KEY `" . $keyName . "` (`" . implode('`, `', $keyFields) . "`)";
        }
        // Extra
        $syntax .= "\n) ENGINE=" . $options['engine'] . " DEFAULT CHARSET=" . $options['charset'] . " COLLATE=" . $options['collate'] . ";";
        return $syntax;
    }