【问题标题】:How to get a column's default value using Laravel?如何使用 Laravel 获取列的默认值?
【发布时间】:2019-07-07 13:56:10
【问题描述】:

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

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

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

【问题讨论】:

标签: php laravel eloquent laravel-artisan


【解决方案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 命名空间中的其他数据库的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 2012-07-31
      • 2012-03-16
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多