Laravelのマイグレーションとは?
ドキュメントではこのように説明されている。
LaravelのSchemaファサードは、Laravelがサポートするすべてのデータベースシステムに対し、テーブルを作成、操作するために特定のデータベースに依存しないサポートを提供します。
通常、マイグレーションはこのファサードを使用して、データベースのテーブルとカラムを作成および変更します。
開発者がRDBMSの種類を意識することなく管理できるようにlaravelがそれを吸収してくれていてとっても便利ですが、
実体のカラム型を知らずして使うのは怖さがあったりする。
ので、簡単にここでまとめる。
差分を吸収してくれているファイルはどこ?
Illuminate\Database\Schema\Grammars
ここに格RDBMSごとのカラム定義がある。
僕はpostgresqlを使っているのでファイルを覗いてみると
例えばこんな記述がある
PostrreGrammar.php
/**
* Create the column definition for a text type.
*
* @param \Illuminate\Support\Fluent $column
* @return string
*/
protected function typeText(Fluent $column)
{
return 'text';
}
/**
* Create the column definition for a medium text type.
*
* @param \Illuminate\Support\Fluent $column
* @return string
*/
protected function typeMediumText(Fluent $column)
{
return 'text';
}
/**
* Create the column definition for a long text type.
*
* @param \Illuminate\Support\Fluent $column
* @return string
*/
protected function typeLongText(Fluent $column)
{
return 'text';
}
laravelマイグレーションファイルで指定できる
「text・mediumText・longTextはpostgresqlでtext型で作りますよ。」
というようになっていたんですね。
このファイルを見れば何に変換されるのかわかりますね。
一覧
多分あってるはず
カラムタイプ | MySQL | PostgreSQL |
---|---|---|
bigInteger | bigint | bigint |
binary | blob | bytea |
boolean | tinyint(1) | boolean |
char | char | char |
date | date | date |
dateTime | datetime | timestamp |
decimal | decimal | decimal |
double | double | double precision |
float | double | double precision |
integer | int | integer |
ipAddress | varchar(45) | inet |
json | json | json |
longText | longtext | text |