我正在使用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] =>
)
答案 0 :(得分:1)
经过一些Doctrine DBAL挖掘后,我发现使用该库是不可能的。模式管理器只需在检索后丢弃此信息。遗憾的是,没有办法在模式管理器类中访问所需的函数来为此提供通用功能,因为它们受到保护,当然我不想对库进行更改。我最终执行了以下SQL for MySQL(它可能不能在平台之间移植,但现在还可以。)
SELECT COLUMN_NAME AS Field, COLUMN_TYPE AS Type FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';