false]; // Unique is always a string in order to control index length if ($isUnique) { return [ 'name' => $alias, 'type' => 'string', 'options' => $options, ]; } switch ($type) { case 'datetime': case 'date': case 'time': case 'boolean': $schemaType = $type; break; case 'number': $schemaType = 'float'; break; case 'timezone': case 'locale': case 'country': case 'email': case 'lookup': case 'select': case 'region': case 'tel': case 'url': $schemaType = 'string'; $options['length'] = $length ?: self::MAX_VARCHAR_LENGTH; break; case 'text': $schemaType = (str_contains($alias, 'description')) ? 'text' : 'string'; $options['length'] = $length; break; case 'multiselect': $schemaType = 'text'; $options['length'] = 65535; break; case 'html': default: $schemaType = 'text'; } if ('string' === $schemaType && empty($options['length'])) { $options['length'] = self::MAX_VARCHAR_LENGTH; } return [ 'name' => $alias, 'type' => $schemaType, 'options' => $options, ]; } /** * @param mixed[] $schemaDefinition */ public static function getFieldCharLengthLimit(array $schemaDefinition): ?int { $length = $schemaDefinition['options']['length'] ?? null; $type = $schemaDefinition['type'] ?? null; return match ($type) { 'string' => $length ?? ClassMetadataBuilder::MAX_VARCHAR_INDEXED_LENGTH, 'text' => $length, default => null, }; } /** * Get the MySQL database type based on the field type. */ public function getSchemaDefinitionNonStatic(string $alias, string $type, bool $isUnique = false, ?int $length = null): array { return self::getSchemaDefinition($alias, $type, $isUnique, $length); } }