0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google sheetのDB定義からLaravelのmigrationコードを作成する

Posted at

「DB定義を見ながらLaravelのmigrationコードを書くのが面倒くさい!」「定義から簡単にコードが作れたらいいのに!」ということで、かなり昔に検索したらGoogle sheet上で作成したDB定義書からmigrationコードを表示してくれる式を書いてくれている記事を見つけました↓

以来、改良しながらありがたく使わせてもらっています。
個人的には結構便利で気に入っているので私が変更を加えたものを共有したいと思います。

Google Sheet上の構造

テーブルカラムの構成は以下の画像のように"Name, Type, Length, Key/Index, Default, Allow null, Values, Note"の順番になっています。最後の2つは式には影響しないので無くても構いません。
どの種類のタイプに対応しているかは式の内容を見てもらえれば。

image.png

Laravel migrationコード表示式

で、I行に以下の式(以下の式は3行目のものです)を貼り付ければ上記の画像のようにI行に式が表示されます。あとはドラッグアンドドロップで式を下の行に複製していけば一気にMigrationコードが作成されます。

=IF($A3="created_at", "$table->datetime('created_at')->nullable();",
 IF($A3="updated_at", "$table->datetime('updated_at')->nullable();",
 IF($A3="deleted_atnotused", "$table->softDeletes();",
 IF($A3="id", "$table->id();",
 IF($A3="remember_token", "$table->rememberToken();",
 IF($B3="double", "$table->double('" & $A3 & "', " & $C3 & ", " & #REF! & ")" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="float", "$table->float('" & $A3 & "', " & $C3 & ", " & #REF! & ")" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="int", "$table->integer('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", "") & IF($D3="index", "->index()", ""),
 IF($B3="tinyint", "$table->tinyInteger('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="smallint", "$table->smallInteger('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="bigint", "$table->bigInteger('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="long", "$table->bigInteger('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="boolean", "$table->boolean('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="datetime", "$table->dateTime('" & $A3 & "')" & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="mediumint", "$table->mediumInteger('" & $A3 & "')" & IF(ISNUMBER($E3), "->default(" & $E3 & ")", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="varchar", "$table->string('" & $A3 & "', " & $C3 & ")" & IF(ISTEXT($E3), "->default('" & $E3 & "')", "") & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="text", "$table->text('" & $A3 & "')" & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="date", "$table->date('" & $A3 & "')" & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="time", "$table->time('" & $A3 & "')" & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 IF($B3="timestamp", "$table->timestamp('" & $A3 & "')" & IF(OR(ISTEXT($F3), $F3=TRUE), "->nullable()", ""),
 "// NO MATCH")))))))))))
 & IF($D3="index", "->index()", "")
 & IF($D3="unique", "->unique()", "")
 ))))
 & ";")))))

主要なタイプしか網羅していませんので、必要に応じて変更してください。
あと、不具合があるかもしれませんので、もし修正箇所があれば指摘していただけると有り難いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?