laravel架构生成器,查找列类型自动增量

laravel架构生成器,查找列类型自动增量,laravel,laravel-5,migration,laravel-schema-builder,Laravel,Laravel 5,Migration,Laravel Schema Builder,我正在更新现有的数据库,以使用自动递增的主键。此数据库当前具有具有自定义值的疯狂命名PK字段。我需要先检查每个表,看看它是否有autoinc字段,然后我想删除它并替换为“id”字段 我想作为一个迁移来做这件事,这是我到目前为止所做的,但我似乎无法确定第一列是否已经在自动递增,因此我可以删除现有的PK并替换它。我需要用firstColumn然后getColumnType之类的东西替换hasColumn foreach ($tableNames as $name)

我正在更新现有的数据库,以使用自动递增的主键。此数据库当前具有具有自定义值的疯狂命名PK字段。我需要先检查每个表,看看它是否有autoinc字段,然后我想删除它并替换为“id”字段

我想作为一个迁移来做这件事,这是我到目前为止所做的,但我似乎无法确定第一列是否已经在自动递增,因此我可以删除现有的PK并替换它。我需要用firstColumn然后getColumnType之类的东西替换hasColumn

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

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

$result=DB::select(“显示表_name中的列”);
dd(结果);

现在,
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": ""
  }
$result = DB::select("SHOW COLUMNS FROM product");
foreach ($result as $key => $value) {
            if($value->Extra == 'auto_increment'){
                //do something
            };
现在您可以轻松提取
“额外”:“自动增量”
,如下所示:

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

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

$result=DB::select(“显示表_name中的列”);
dd(结果);

现在,
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": ""
  }
$result = DB::select("SHOW COLUMNS FROM product");
foreach ($result as $key => $value) {
            if($value->Extra == 'auto_increment'){
                //do something
            };
现在您可以轻松提取
“额外”:“自动增量”
,如下所示:

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

您是否尝试过
Schema::getColumnType($table,$column)
?@AbrarShariarGalib是的,我现在正在努力,显然laravel需要包含条令/DBAL。我想我需要得到一个列列表,然后将第一个列提供给它,以检查它的autoincreally@AbrarShariarGalib它只是说“integer”,而不告诉我它是否是一个自动递增的int现在我可以考虑使用
DB::raw()
其中sql查询将有类似于-
的额外内容,如“%auto_increment%”
您是否尝试过
Schema::getColumnType($table,$column)
?@AbrarShariarGalib是的,我现在在这方面,显然laravel需要包含条令/DBAL。我想我需要得到一个列列表,然后将第一个列提供给它,以检查它的autoincreally@AbrarShariarGalib它只是说“integer”,而不告诉我它是否是一个自动递增的int现在我可以考虑使用
DB::raw()
其中sql查询将具有类似-
额外的类似“%auto\u increment%”的内容。
我将执行此操作或从信息架构中选择类似“从信息架构中选择列名称”。
其中TABLE\u schema='TABLE\u schema'和TABLE\u NAME='TABLE\u NAME'和EXTRA='auto\u increment'. 我希望我能和拉雷维尔一起做,但这已经足够好了。谢谢你的意见!我可以这样做,也可以从信息模式中进行选择,比如“从信息模式中选择列名称。
其中TABLE\u schema='TABLE\u schema',TABLE\u NAME='TABLE\u NAME',extra='auto\u increment'”。我希望我能和拉雷维尔一起做,但这已经足够好了。谢谢你的意见!