如何使用 Laravel 获取列的默认值?

How to get a column's default value using Laravel?

我正在构建一个自定义 artisan 命令,它需要能够访问特定列的数据库默认值。我不能使用属性数组。所以我需要另一种方式。

我试过使用Schema。我已经能够获得 table DB::table($table) 和列名 Schema::getColumnListings($table) 但不是默认值。

是否有其他获取默认值的方法?

Laravel Schema Builder 仅 returns 设计的列名称。但是您可以通过执行数据库语句来使用 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 数据库,但您可以通过搜索方法 Laravel 源代码的 Illuminate\Database\Schema\Grammars 命名空间中的其他数据库查看方法 compileColumnListing.

Laravel 5+(包括6和7)中,可以得到db table列元数据(即类型,默认值等)以下方式:

use Illuminate\Support\Facades\Schema;

对于所有列:

$columns = Schema::getConnection()->getDoctrineSchemaManager()->listTableColumns('table_name');

对于单列:

$column = Schema::getConnection()->getDoctrineColumn('table_name'', 'column_name');

getDoctrineSchemaManager 方法 returns \Doctrine\DBAL\Schema\Column Class 个实例的数组。通过使用它,您可以获得有关 db table 列的所有信息。

getDoctrineColumn 方法 returns \Doctrine\DBAL\Schema\Column 的实例 class.

来自 \Doctrine\DBAL\Schema\Column class:

的几个方法
$column->getName();
$column->getNotnull(); // returns true/false
$column->getDefault(); 
$column->getType(); 
$column->getLength();