2

我正在使用 Doctrine DBAL 项目来获取下表中列的长度(在这种情况下,整数的长度为 8)。我不使用 ORM,也没有在 YML 或任何东西中定义架构。

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

在寻找答案时,我注意到根据参数类型,似乎有几个属性可以提供一些有用的信息;长度、精度和规模。以下代码列出了一些列属性,但没有列出我正在寻找的 8 的长度。让我感到非常惊讶的是,很难找到这个常见的列属性。

$sm = $connection->getSchemaManager(); // $connection is assumed to exist (for e.g. via $this->container->get('database_connection') in Symfony)
foreach ($sm->listTableColumns('mytable') as $column) {
    print_r($column->toArray());
}

Output:
Array
(
    [name] => id
    [type] => Doctrine\DBAL\Types\IntegerType Object
        (
        )

    [default] => 
    [notnull] => 1
    [length] => 
    [precision] => 10
    [scale] => 0
    [fixed] => 
    [unsigned] => 
    [autoincrement] => 1
    [columnDefinition] => 
    [comment] => 
)
4

1 回答 1

2

经过一些 Doctrine DBAL 挖掘后,我发现使用该库是不可能的。模式管理器在检索后简单地丢弃此信息。不幸的是,无法访问模式管理器类中所需的函数来为此提供通用功能,因为它们受到保护,当然我不想对库进行更改。我最终为 MySQL 执行了以下 SQL(它可能无法在平台之间移植,但目前还可以)。

SELECT COLUMN_NAME AS Field, COLUMN_TYPE AS Type FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';
于 2013-05-17T08:34:54.247 回答