エラー内容
Laravelのマイグレーションでtimestamp型のカラムに変更を加えようとすると以下のようなエラーが出る。
Unknown column type "timestamp" requested. Any Doctrine type that you use has to be registered with \
Doctrine\DBAL\Types\Type::addType(). You can get a list of all the known types with \Doctrine\DBAL\Ty
pes\Type::getTypesMap(). If this error occurs during database introspection then you might have forgo
tten to register all database types for a Doctrine Type. Use AbstractPlatform#registerDoctrineTypeMap
ping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type name is empty y
ou might have a problem with the cache or forgot some mapping information.
理由
Laravel内で利用しているDoctrineというライブラリが対応していないから。ちなみに対応の予定もなさそう。
https://github.com/doctrine/dbal/issues/2558
理由としてはtimestamp型はMySQL固有の型だから特定のDBサービス用の型はサポートしないよということ。
ちなみにLaravelのchangeで変更できるカラムの種類は以下に限られている
bigInteger
binary
boolean
date
dateTime
dateTimeTz
decimal
integer
json
longText
mediumText
smallInteger
string
text
time
unsignedBigInteger
unsignedInteger
unsignedSmallInteger
解決策
DBファサードを使って生のSQLを発行する
MySQLのバージョンは5.7.25です。
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE `テーブル名` MODIFY COLUMN `カラム名` TIMESTAMP NULL;');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::statement('ALTER TABLE `テーブル名` MODIFY COLUMN `カラム名` TIMESTAMP NOT NULL;');
}