Laravel Schema Builder, найти автоинкремент columnType

Я работаю над обновлением существующей базы данных, чтобы использовать автоинкрементные первичные ключи. Эта БД в настоящее время имеет сумасшедшие именованные поля PK с пользовательскими значениями. Мне нужно сначала проверить каждую таблицу, чтобы узнать, имеет ли она поле autoinc, а затем я хочу удалить ее и заменить на поле 'id'.

Я хочу сделать это как миграцию, вот что у меня есть до сих пор, но я не могу определить, является ли первый столбец автоинкрементным, уже так, чтобы я мог отбросить существующий PK и заменить. Мне нужно заменить hasColumn чем-то вроде firstColumn, затем getColumnType...

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

1 ответ

Решение

Чтобы решить эту проблему, я запустил следующий код с контроллера. Обратите внимание, что у меня есть только два поля для демонстрации (id,name)

$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
            };
Другие вопросы по тегам