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
};