如何在Laravel中获取数据库字段类型?

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()

  • @abkrim 你需要运行 `composer require algorithm/dbal` 来安装依赖项。 (2认同)

Sᴀᴍ*_*ᴇᴌᴀ 16

对于 Laravel 5.2 - 8.x

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)


Paw*_*mar 9

获取表字段的所有详细信息

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)


fid*_*per 6

简短回答:是的,该功能存在

在搜索完代码后,我发现你可以.跳到下面的"解决方案"来查看它.

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)


asm*_*mud 5

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)