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