有没有办法获取数据库表字段的数据类型?这几乎就像迁移的逆过程。
例如,如果用户表列的迁移看起来像
...
$table->integer('age')
...
integer
如果我指定 tableuser
和 column是否有返回的函数age
?
我对特定的数据库实现不感兴趣,(mysql_field_type()
)。就像 Laravel 的迁移一样,它需要与数据库无关。
对于 Laravel 4:
在 Laravel 中挖掘之后,这就是我得到的。
DB::connection()->getDoctrineColumn('users', 'age')->getType()->getName()
利用Illuminate\Database\Schema\Builder::getColumnType()
DB::getSchemaBuilder()->getColumnType($tableName, $colName)
例如
$ageType = DB::getSchemaBuilder()->getColumnType('user', 'age')
如果您尚未运行此命令,则可能需要:
composer require doctrine/dbal
搜索代码后,我发现你可以。跳到下面的“解决方案”查看它。
Eloquent 和 Database 类使用 PDO,它不会将您绑定到特定的基于 SQL 的数据库。
因此,您应该能够执行以下操作:
$pdo = DB::getPdo();
请注意,连接对象可以返回 PDO 的实例。
有一些方法,如getColumnMeta,但并非所有驱动程序都完全支持它们。
但是,一些谷歌搜索似乎指出,最好的方法可能是使用ANSI 标准的 INFORMATION_SCHEMA - 使用 sql 查询来获取该信息。
最后,Laravel 包含 Doctrine 库作为依赖项,它确实包含一些模式功能。
旁注:事实上,包含 Doctrine 是因为它的基于模式的功能 - Laravel 不使用 Doctrine 的 ORM
在我们检索 PDO 实例的同一个连接对象上参见此处,我们可以获取学说连接和模式管理器。您应该可以致电:
$schema = DB:: getDoctrineSchemaManager();
然后,您可以使用模式管理器(此处的文档)来获取您想要的内容。
获取表字段的所有详细信息
DB::select('describe table_name');
例子:-
DB::select('describe users');
回复会是这样
Array
(
[0] => stdClass Object
(
[Field] => id
[Type] => int(11)
[Null] => NO
[Key] => PRI
[Default] =>
[Extra] => auto_increment
)
[1] => stdClass Object
(
[Field] => user_group_id
[Type] => int(11) unsigned
[Null] => YES
[Key] => MUL
[Default] =>
[Extra] =>
)
[2] => stdClass Object
(
[Field] => username
[Type] => varchar(100)
[Null] => YES
[Key] => MUL
[Default] =>
[Extra] =>
)
)
在Laravel 5+(包括 6 和 7)中,您可以通过以下方式获取 db 表列元数据(即类型、默认值等):
use Illuminate\Support\Facades\Schema;
对于所有列:
$columns = Schema::getConnection()->getDoctrineSchemaManager()->listTableColumns('table_name');
$column = Schema::getConnection()->getDoctrineColumn('table_name'', 'column_name'); //For a single column:
getDoctrineSchemaManager
\Doctrine\DBAL\Schema\Column
方法返回一个类实例数组。
getDoctrineColumn
方法返回类的实例\Doctrine\DBAL\Schema\Column
。
类中的几个方法\Doctrine\DBAL\Schema\Column
:
$column->getName();
$column->getNotnull(); // returns true/false
$column->getDefault();
$column->getType();
$column->getLength();
我将它与 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');
将此表达式与下拉函数一起使用,可以向您显示所有表字段的数组详细信息:
dd(DB::select(DB::raw('SHOW FIELDS FROM tablename')));
$temp = $this->newQuery()->fromQuery("SHOW FIELDS FROM ".$this->getTable()); foreach($temp as $val){ echo '字段:'.$val->Field; echo '类型:'.$val->Type; }
概括:
DB::connection()->getDoctrineColumn($tableName, $colName)
->getType()
->getName();
它适用于 Laravel 5.3。