如何使用 Laravel 获取列的默认值?
Posted
技术标签:
【中文标题】如何使用 Laravel 获取列的默认值?【英文标题】:How to get a column's default value using Laravel? 【发布时间】:2019-07-07 13:56:10 【问题描述】:我正在构建一个自定义工匠命令,该命令需要能够访问数据库中某些列的默认值。我不能使用属性数组。所以我需要另一种方式。
我尝试使用Schema
。我已经能够得到表DB::table($table)
和列名Schema::getColumnListings($table)
但不是默认值。
还有其他获取默认值的方法吗?
【问题讨论】:
我不认为有一个命令可以做到这一点,但this SO question 或this question 可能会帮助您创建自己的方法。 【参考方案1】:在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');
getDoctrineSchemaManager
方法返回\Doctrine\DBAL\Schema\Column
类实例的数组。通过使用它,您可以获得有关 db 表列的所有信息。
getDoctrineColumn
方法返回\Doctrine\DBAL\Schema\Column
类的实例。
来自\Doctrine\DBAL\Schema\Column
类的几个方法:
$column->getName();
$column->getNotnull(); // returns true/false
$column->getDefault();
$column->getType();
$column->getLength();
【讨论】:
【参考方案2】:Laravel Schema Builder 仅根据设计返回列名。但是您可以通过执行数据库语句来使用 Laravel 内部使用的相同方法:
$results = DB::select('
select column_default
from information_schema.columns
where
table_schema = ?
and table_name = ?
', [$database, $table]);
// Flatten the results to get an array of the default values
$defaults = collect($results)->pluck('column_default'))
以上示例适用于 mysql 数据库,但您可以通过搜索方法 compileColumnListing
来查看 Laravel 源代码的 Illuminate\Database\Schema\Grammars
命名空间中的其他数据库的方法。
【讨论】:
以上是关于如何使用 Laravel 获取列的默认值?的主要内容,如果未能解决你的问题,请参考以下文章