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

时间:2019-02-13 16:34:24

标签: php laravel eloquent artisan

我正在构建一个定制的artisan命令,该命令需要能够访问某些列的数据库默认值。我不能使用属性数组。因此,我需要另一种方式。

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

还有其他方法可以获取默认值吗?

2 个答案:

答案 0 :(得分: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数据库,但是您可以通过搜索方法Illuminate\Database\Schema\Grammars来查看Laravel源代码的compileColumnListing命名空间中其他数据库的方法。

答案 1 :(得分:0)

Laravel 5+(包括6和7)中,您可以通过以下方式获取数据库表列的元数据(即类型,默认值等):

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类实例的数组。通过使用此功能,您可以获得有关数据库表列的所有信息。

getDoctrineColumn方法返回\Doctrine\DBAL\Schema\Column类的实例。

来自\Doctrine\DBAL\Schema\Column类的方法:

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