Hao*_*Luo 18 php database laravel
有没有办法获取数据库表字段的数据类型?几乎像迁移的倒数.
例如,如果用户表列的迁移看起来像
...
$table->integer('age')
...
Run Code Online (Sandbox Code Playgroud)
integer如果我指定表user和列,是否会返回一个函数age?
我对特定的数据库实现不感兴趣,(mysql_field_type()).像Laravel的迁移一样,它需要与数据库无关.
Hao*_*Luo 28
在Laravel挖掘之后,这就是我得到的.
DB::connection()->getDoctrineColumn('users', 'age')->getType()->getName()
Sᴀᴍ*_*ᴇᴌᴀ 16
用 Illuminate\Database\Schema\Builder::getColumnType()
DB::getSchemaBuilder()->getColumnType($tableName, $colName)
Run Code Online (Sandbox Code Playgroud)
例如
$ageType = DB::getSchemaBuilder()->getColumnType('user', 'age')
Run Code Online (Sandbox Code Playgroud)
如果您还没有运行此命令,则可能需要:
composer require doctrine/dbal
Run Code Online (Sandbox Code Playgroud)
获取表字段的所有详细信息
DB::select('describe table_name');
Run Code Online (Sandbox Code Playgroud)
例子:-
DB::select('describe users');
Run Code Online (Sandbox Code Playgroud)
响应将是这样的
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] =>
)
)
Run Code Online (Sandbox Code Playgroud)
在搜索完代码后,我发现你可以.跳到下面的"解决方案"来查看它.
Eloquent和Database类使用PDO,它不会绑定特定的基于SQL的数据库.
因此,您应该能够做到这样的事情:
$pdo = DB::getPdo();
Run Code Online (Sandbox Code Playgroud)
请注意,连接对象可以返回PDO的实例.
有一些方法,如getColumnMeta,但并不是所有驱动程序都完全支持它们.
然而,一些谷歌搜索似乎指出,最好的方法可能是使用ANSI标准INFORMATION_SCHEMA - 使用SQL查询来获取该信息.
最后,Laravel将Doctrine库作为依赖项包含在内,它确实包含一些模式功能.
旁注:事实上,Doctrine因其基于模式的功能而被包含在内 - Laravel不使用Doctrine的ORM
在这里查看我们检索PDO实例的同一个连接对象,我们可以获得doctrine连接和schema Manager.你应该可以打电话:
$schema = DB:: getDoctrineSchemaManager();
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用架构管理器(此处的文档)来获取您所追求的内容.
小智 5
将此表达式与拨号函数一起使用可显示所有表字段的数组详细信息:
dd(DB::select(DB::raw('SHOW FIELDS FROM tablename')));
Run Code Online (Sandbox Code Playgroud)
在Laravel 5+(包括 6 和 7)中,您可以通过以下方式获取 db 表列元数据(即类型、默认值等):
use Illuminate\Support\Facades\Schema;
Run Code Online (Sandbox Code Playgroud)
对于所有列:
$columns = Schema::getConnection()->getDoctrineSchemaManager()->listTableColumns('table_name');
$column = Schema::getConnection()->getDoctrineColumn('table_name'', 'column_name'); //For a single column:
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)