2013-05-16 78 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';