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')
...
如果我指定tableuser
和columnage
,是否有返回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();