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

Php 如何在Laravel中获取数据库字段类型?,php,database,laravel,Php,Database,Laravel,有没有办法获取数据库表字段的数据类型? 这几乎就像是迁移的逆过程 例如,如果用户表列的迁移如下所示 ... $table->integer('age') ... 如果我指定tableuser和columnage,是否有返回integer的函数 我对特定的数据库实现不感兴趣,(mysql\u field\u type())。与Laravel的迁移一样,它需要与数据库无关。对于Laravel 4: 在拉拉维尔挖过之后,这就是我得到的 DB::connection()->getDoctrine

有没有办法获取数据库表字段的数据类型? 这几乎就像是迁移的逆过程

例如,如果用户表列的迁移如下所示

...
$table->integer('age')
...
如果我指定table
user
和column
age
,是否有返回
integer
的函数

我对特定的数据库实现不感兴趣,(
mysql\u field\u type()
)。与Laravel的迁移一样,它需要与数据库无关。

对于Laravel 4:

在拉拉维尔挖过之后,这就是我得到的

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

简短回答:是的,该功能存在 在搜索代码之后,我发现你可以。跳到下面的“解决方案”查看

Eloquent和数据库类使用PDO,它不会将您绑定到特定的基于SQL的数据库

因此,您应该能够这样做:

$pdo = DB::getPdo();
请注意,连接对象可以

有一些方法,如,,但并非所有驱动程序都完全支持这些方法

然而,一些谷歌搜索似乎指出,最好的方法可能是使用——使用sql查询来获取信息

解决方案 最后,Laravel将条令库作为一个依赖项包括在内,其中确实包含一些

旁注:事实上,条令包含在基于模式的功能中——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>";
    }
}
$schema=\DB::getDoctrineSchemaManager();
$tables=$schema->listTables();
foreach($tables作为$table){
回显“$table->getName()”列:
”; foreach($table->getColumns()作为$column){ echo'-'.$column->getName().“-”$column->getType()->getName().“
”; } }
或者使用以下命令获取特定的表:
$columns=$schema->listTableColumns('user')

概括:

DB::connection()->getDoctrineColumn($tableName, $colName)
    ->getType()
    ->getName();
它适用于Laravel5.3。

适用于Laravel5.2-8.x 使用

e、 g

如果尚未执行以下操作,则可能需要运行此命令:

composer require doctrine/dbal
模型内:laravel5.x $temp=$this->newQuery()->fromQuery(“显示来自“$this->getTable()的字段”); foreach($temp作为$val){ 回显“字段:”。$val->字段; 回显“类型:”。$val->Type; }
将此表达式与拨号函数一起使用,以显示所有表字段的数组详细信息:

dd(DB::select(DB::raw('SHOW FIELDS FROM tablename')));

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

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
类的实例

来自
\doctor\DBAL\Schema\Column
类的两个方法:

$column->getName();
$column->getNotnull(); // returns true/false
$column->getDefault(); 
$column->getType(); 
$column->getLength();

不幸的是,没有办法使用模式生成器。不过谢谢:)很好!我只是把自己局限于模式生成器,但事实上,条令可以提供很多信息。哇,你们完全打败了我:哇,你们两个也打败了我。@abkrim您需要运行
composer require-doctor/dbal
来安装依赖项。@haolou链接不需要您发言。条令问题是因为不支持枚举类型。这不支持jsonb。当我的表中有一个属性是jsonb时,还有其他选择吗?下面是有效的方法:
$column\u type=DB::getSchemaBuilder()->getColumnType($model->getTable(),$column\u name)
将composer更新为
“条令/dbal”:“~2.6”
谢谢-我更新了我的答案;我的团队使用
illumb\Support\Facades\Schema::connection()
指定需要哪个连接,并返回
\illumb\Database\Schema\Builder
实例。。。谢谢你帮我概括这一点。是的,你让我找到了正确的答案。我转而投赞成票。谢谢。composer需要最简单、最有效的解决方案。
use Illuminate\Support\Facades\Schema;
 $columns = Schema::getConnection()->getDoctrineSchemaManager()->listTableColumns('table_name');
 $column = Schema::getConnection()->getDoctrineColumn('table_name'', 'column_name'); //For a single column:
$column->getName();
$column->getNotnull(); // returns true/false
$column->getDefault(); 
$column->getType(); 
$column->getLength();