Как получить тип поля базы данных в Laravel?

Есть ли способ получить тип данных поля таблицы базы данных? Почти как обратная миграция.

Например, если перемещение столбца таблицы пользователей выглядит так:

... $table->integer('age') ... 

Есть ли функция, которая вернет integer если я укажу имя user и age столбца?

Меня не интересует конкретная реализация базы данных ( mysql_field_type() ). Как и миграция Laravel, она должна быть агностикой базы данных.

После копания в Ларавеле, это то, что я получил.

DB::connection()->getDoctrineColumn('users', 'age')->getType()->getName()

Короткий ответ: Да, эта функциональность существует

После очистки кода я обнаружил, что вы могли. Пропустите ниже «Решение», чтобы увидеть его.

Eloquent и классы базы данных, используйте PDO, который не связывает вас с конкретной базой данных на базе SQL.

Поэтому вы должны иметь возможность сделать что-то вроде этого:

 $pdo = DB::getPdo(); 

Обратите внимание, что объект соединения может возвращать экземпляр PDO .

Существуют некоторые методы, такие как getColumnMeta , но они не полностью поддерживаются всеми драйверами .

Тем не менее , некоторые поисковые запросы, похоже, указывают на то, что лучшим способом может быть использование ANSI-standard INFORMATION_SCHEMA – использование запросов sql для получения этой информации.

Решение

Наконец , Laravel включает библиотеку Doctrine в качестве зависимости, которая содержит некоторые функциональные возможности схемы .

Sidenote: Doctrine, по сути, включена в ее функциональность на основе схемы. Laravel не использует ORM доктрины

См. Здесь, в том же объекте соединения, где мы извлекли экземпляр PDO, мы можем получить соединение с доской и диспетчер схем. Вы должны иметь возможность позвонить:

 $schema = DB:: getDoctrineSchemaManager(); 

Затем вы можете использовать диспетчер схем ( документы здесь ), чтобы получить то, что вам нужно.

Я использую это с laravel 4.1 ,,

 $schema = \DB::getDoctrineSchemaManager(); $tables = $schema->listTables(); foreach ($tables as $table) { echo "<i>".$table->getName() . " </i><b>columns:</b><br>"; foreach ($table->getColumns() as $column) { echo ' - ' . $column->getName() . " - " . $column->getType()->getName() . "<br>"; } } 

или для использования конкретной таблицы: $columns = $schema->listTableColumns('user');

Обобщая:

 DB::connection()->getDoctrineColumn($tableName, $colName) ->getType() ->getName(); 

Он работает на Laravel 5.3.

Для Laravel 5.5 используйте Builder :: getColumnType ()

 DB::connection()->getColumnType($tableName, $colName)