2013-05-16 41 views
1

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

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] => 
) 

回答

1

经过一些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';