laravel模式构建器,找到columnType autoincrement

时间:2016-12-20 14:47:54

标签: laravel laravel-5 migration laravel-schema-builder

我正在努力更新现有数据库以使用自动增量主键。这个数据库目前有疯狂的命名PK字段与自定义值。我需要首先检查每个表,看它是否首先是autoinc字段,然后我想删除它并替换为'id'字段。

我想这样做是为了迁移,这是我到目前为止所做的,但我似乎无法确定第一个col是否已经自动增量,所以我可以删除现有的PK并替换。我需要用firstColumn替换hasColumn,然后使用getColumnType ...

    foreach ($tableNames as $name)
                if (!Schema::hasColumn($name, 'id')) {
                Schema::table($name, function ($table) {
                    $table->dropPrimary();
                    $table->increments('id')->first();
                });
            }
        }

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我从控制器运行了以下代码。请注意,我只有两个演示字段(idname

$result = DB::select("SHOW COLUMNS FROM table_name"); dd($result);

现在dd()之后的输出有点像这样:

0 => {#162 ▼
    +"Field": "id"
    +"Type": "int(11)"
    +"Null": "NO"
    +"Key": "PRI"
    +"Default": null
    +"Extra": "auto_increment"
  }

1 => {#164 ▼
    +"Field": "name"
    +"Type": "varchar(255)"
    +"Null": "YES"
    +"Key": ""
    +"Default": null
    +"Extra": ""
  }

现在您可以轻松提取"Extra" : "auto_increment",如下所示:

$result = DB::select("SHOW COLUMNS FROM product");
foreach ($result as $key => $value) {
            if($value->Extra == 'auto_increment'){
                //do something
            };