Есть ли способ получить тип данных поля таблицы базы данных? Почти как обратная миграция.
Например, если перемещение столбца таблицы пользователей выглядит так:
... $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)