LaravelDB.com～操作方法と勘所を書いた〜（基本操作編）


##◇LaravelDB.com ？
Laravelのデータベース設計（ER図）するだけで、Migrationファイルがポンって作成できるFreeの**「 テーブル設計＆Migration作成 」** ツールです。
＊2020-10-04にアップデートしValidationも生成されます。

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/f21527f4-a43d-26af-3580-c614f8a17d05.png">

#### PHPカンファレンス2020で紹介（Youtube）
https://youtu.be/Y_HeO5q7d4s
 
#### 操作説明（Youtube）
https://youtu.be/sHt5v4XOWbc
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/sHt5v4XOWbc/0.jpg)](https://youtu.be/sHt5v4XOWbc)

####メイン機能
- Migrationの自動生成
- Validation(FormRequest)の自動生成
- チームメンバーとの共有可能
- CRUDコード（β版）の自動生成
- CRUDコード（β版）でのValidation自動生成（テーブル設計に合わせて自動で生成）

####利用について
個人/プログラミング学習者： 無料
企業/商用利用：paypal等の寄付・ウイッシュリストでの寄付・Twitter等のSNSでの応援投稿も可


####用途
用途は開発者によってバラバラですね。
・Migrationのみ使う（ほとんどの人はここですかね）
・CRUDファイル全部（数％くらいの人）
・コード生成後、一部（Validationとか）をコピーして使う（結構な割合でいます）
・テーブル設計の共有（Team開発では使ってるようです）

#◇操作方法（マニュアル）



####１．テーブル作成
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/514253c7-7d6b-987e-9e9b-f43a6ffc8520.png">

####2．カラム作成
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/2af44996-c5db-7bef-aef3-b6d21b78d530.png">
※使いやすくするポイント！！ 「列を追加」ボタンを連打で必要な数だけ先に作ると便利！！
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/a9e7e310-be02-cd7f-c7a0-25a8c25664fc.png">



####３．2020-09-24アップデートから使用可能
######「 ENUM, UNSIGNED ] に対応、新規プロジェクトより表示されるようになります
以下はENUM、Doubleの入力してる例です。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/53d1b651-914e-9c49-9fe4-4e006d875ef9.png">

######「 UNIQUE, INDEX ] に対応、新規プロジェクトより表示されるようになります
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/d91e4f33-e23c-bcb9-f94b-99765ba3af29.png">

######外部キーの設定
外部キー制約を使用する場合（ ※1対他、多対多などを分ける機能は無い）
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/df69d937-e07f-39e9-6c98-1854327f2570.png">



####4.ER図の保存
コントロールパネル**[Data:セーブ/ロード]**から移動します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/c694293f-9778-e73b-6a3a-90cbe4d8ba41.png" width="800">

「クラウドに保存」or「ブラウザに保存」を選択できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/a1b12312-3a9c-ccb3-3108-5a5856f5fe64.png" width="800">

この例では「クラウドに保存」を選択。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/e34fa9ef-c29d-fa7a-8eb3-ec479230eeb9.png" width="800">


| Save/Load機能   |       機能詳細 | 
|:-----------------|:------------------|
| クラウドへ保存      | アカウントに紐づきクラウドに保存します。|
| クラウドデータ一覧   | 保存したクラウド側のデータ一覧 |
| ブラウザに保存      | 使用中のブラウザ「LocalStorage」に一時保存 |
| ブラウザデータ一覧  | localStorageに保存したデータ一覧 |


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/f79981e9-6c67-dd68-c7a3-7ca56c7dcbae.png" width="800">

上記の「データ一覧」選択後、「 -- Data List -- 」の選択肢が表示されます。
そこに表示されるデータ項目を選択するとER図を復元します。

####5.Migrationを生成
[ER図から出力]内の**Build [Migration]**ボタンをクリックしてダウンロードします！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/0be6b322-b74c-8364-d19f-f3f61880dd89.png" width="800">
Zipファイルを解凍してダウンロードファイルを確認。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/62bf1af9-c964-c4f1-4bd3-1d68c9a1a8bd.png" width="800">



###【ER図をTeamでシェア】
テーブル設計をシェアする機能のことです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/90ce9198-89b9-b9eb-57e2-727286c07ba8.png" width="1000">


####1 [送信側：シェアData]作成
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/9cb3cd6b-cff6-84a3-4f02-82fae7eff865.png" width="1000">
見せたい相手にIDを渡しておいて、変更があれば「Create a [Share ID]」ボタンを押すと毎度データ更新されることを知っておきましょう！

####2 [送信側：シェアData] IDをコピー
ここでコピーしたIDを相手に知らせます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/617c6552-5c2f-7b97-18ea-b70a5f979958.png" width="1000">


####3 [受信側：シェアData]読み込み
相手は送られてきた[シェアData]IDを貼り付けます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/084d4a23-b8a6-0593-6f36-b4fc9cbe5c9f.png" width="1000">

#####4 「Read」ボタンをクリックしてデータを受信表示しましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/2506b188-2dfe-f55b-a78e-9ef788b8b558.png" width="1000">

#####3.シェアデータの複製が完了！！
受信側にデータが入りました！受信側もそのデータを活用できるようになります。
チーム・メンタリング等のケースでも利用可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/31739f72-725f-0845-87b6-05278eb6c813.png" width="1000">
※受信後は「別名を付けて保存しておくと良いでしょう！」



##◇ リバースエンジニアリング（Migration → ER図）

フォルダにMigrationファイル（Schema::createのみ）一式集めZip圧縮したファイルをアップロードすることで、ER図へ変換（リバース）することが可能です。



<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/e229bed6-c14b-9a48-e4da-44a86fc2db43.png" width="600" style="border:1px solid #555;">

**Migrationファイル一式をZIP圧縮 → [ Reverse >>> ERD ]ボタンでアップロード**
**アップロード完了するとER図が表示されます。**

| Migration（ZIPファイルに一式纏めて）  |       機能詳細 | 
|:-----------------|:------------------|
| [ Reverse >>> ERD ]  | Migrationファイル一式をフォルダに入れて、ZIP圧縮したファイルをアップロード|





***１．注意***
以下Migrationファイル 「 Schema::create 」のみ現在は可能
 ※ Schema::create以外は対応検討中

***２．注意***
「LaravelDB.com」からZIPファイルをダウンロードしたファイルをそのままアップロードは出来ません。必ず、一度解凍したものをZIP圧縮しなおしてuploadしてください。 

***３．注意***
**macOS Catalinaのデフォルト圧縮では使用できない**と報告が上がっています！！
『 macOS Catalinaによるzipファイルが解凍できない＆ZIPアップロード読み込み不具合も解決あらゆる圧縮ファイルを解凍できる 「 The Unarchiver 」 』
https://tcd-theme.com/2019/10/the-unarchiver.html
をお使いください。


##◇ β版のCRUD/リレーションを使用したい場合（まだまだ開発段階の未知の機能）
**<重要>この機能はテーブル名の末尾に「s」が無いとうまく動作しません。**
※ENUMは必須・未入力のみ出力。
※intは型・必須・未入力のみ出力、sizeが未対応。
※2020-09-24Migrtion機能にアップデートが入ったので、β版機能に影響があるかもしれません。

1. まずは、複数のテーブルを簡単に作り「外部キーの接続」をして準備してください！！
その後、右メニュー**「 [Data]セーブ/ロード 」**クリックすると以下画面が表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/81abee9e-f7c8-74f7-2dd6-759fb7319135.png" width="1000">

2.  **BUILD [CRUD CODE]** をクリック！！CRUD ファイル一式が生成されます

######【ポイント】

 - [x] **Relation(Beta)**にチェックを入れておくとリレーションします。


 - **BUILD [MIGRATION]** でもリレーション(QueryBuilder)がコメントで生成されますよ。




####【このツールでのリレーションのポイント】
- JOINしてるテーブルの全ての項目を最初は表示します(同項目名が存在する場合、片方のみ表示します)。
- CRUDのコードが生成されたら、仕様に合わせてHTMLテーブルの項目を削除してください。
- リレーションは上記画像のように「チェック」を入れないと生成しないようにしています（Beta版のため）。
- Controller内にコードが生成されてますので、確認しておくと良いでしょう！
- 外部キーは**このツールでは非推奨**としています（理由：Migrationの実行順序が重要でエラーになりやすい為）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/cd34d354-0745-ca7b-d667-2dfdcf745477.png" width="1000">
プロトタイプ（ベースになるコードを生成してくれる）には十分すぎる機能ですね。


##◇Validation → テーブル設計に合わせて生成
######Validationって地味に面倒ですよね、完璧では内容ですが、少しの手直しで使用できるなら便利そうです！！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/33bb5172-0dcf-f34c-9c5d-07407bc53921.png" width="1000">

上記Migrationの場合、以下Validationを生成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/0ba46621-2ad1-0ae6-e600-eddb4efd4d1a.png" width="1000">

生成されたコントローラーのFormRequest（Migration書き出しの場合）やcreate(),edit()（CRUD書き出しではコントローラーに直接記述してあります）にはこういったvalidationが挿入されます。


#### {{old('name')}} → 入力項目を補完（CRUD：β版を使用した場合に生成されます）
validationで未入力等ではじかれた場合、入力した文字を消さずに表示します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104530/d61dbd53-0e46-7dff-5028-ff07b22e71e8.png" width="1000">

####ベータ版のCRUD/リレーションの利用シーン
上記のようにβ版ではありますが、全てを利用するというよりは、コードを生成して、必要な部分だけ使うのも良いと思います。（実際にそういったケースを耳にしました〜）




##◇LaravelDB.com 対応カラム一覧
tinyIncrements
mediumIncrements
smallIncrements
bigIncrements
increments
mediumInteger
smallInteger
bigInteger
tinyInteger
integer
unsignedInteger (2020-09-24対応)
unsignedTinyInteger (2020-09-24対応)
unsignedSmallInteger (2020-09-24対応)
unsignedMediumInteger (2020-09-24対応)
unsignedBigInteger (2020-09-24対応)
decimal
double
float
enum (2020-09-24対応)
geometryCollection
geometry
jsonb
json
char
longText
mediumText
text
multiLineString
lineString
string
multiPoint
multiPolygon
point
polygon
binary
nullableTimestamps
timestamps (2020-09-24対応)
softDeletes (2020-09-24対応)
dateTime
timestamp
time
year
date



#◇そもそも、なんで作ったの？
私は学校でプログラミング（サービスを作る基本）を教えていて、テーブル設計している学生がその場にいて
「テーブル設計して、そこからMigrationファイル作成して、コードをイチから書いて・・・」普通の作業ではあるんですが、何故か「その時は疑問を感じました」、ER図書いたらMigrationファイル生成したら便利だよね～。
何割かの開発者は喜んでくれるのでは？と思ったのがキッカケでした。
特に「テーブル設計は保存可能」なので、前回作ったテーブル設計から新しい設計を複製できるのは嬉しい機能です。設計してMigration or CRUDコード書き出してができるので、「設計して→コード書いて」という往復作業が無くなるので、是非使ってほしいと思います。

##今後の展開
**2020-09-24以降からは「Migration」を軸にアップデートしていきます**
なぜ、↑そう思ったか？
良かれと思った機能が意外に余計だった。。。よくあるパターンですね。
テーブル名に"t_","m_"とかトランザクション・マスターテーブルなどがテーブル名で分かるようにした場合に、自動で「timestamps」「softDeletes」などを挿入する機能が逆に「解りにくくさせていた」という事があります。今回のアップデートで廃止いしたのでご安心ください（余計なことはしません(^^)）。
やはりシンプルがベストなんですよね。今はいかに「シンプルにするか」だけ考えてアップデートを考えています。
※必要な機能はどうやって複雑にせずに追加するか？など、悩みが楽しくてしょうがありません。
※CRUD（β版）機能のアップデートはどうなるか未定（Laravel7までは動作確認ずみ）
※Laravel8移行のLTSの仕様で検討予定ですかね～～～かなり変わってるように思ったので。

#最後に
ぜひ、応援していただければと存じます。
PHP開発者・Laravel開発者の一助に慣れば幸いです。


#◇LaravelDB.com サイト
[laravelDB.com](https://laraveldb.com)


#◇Twitterアカウント
[LaravelDB.com](https://twitter.com/ErdLaravel)


#◇ Youtubeチャンネル
[「遅咲きエンジニア」MicrosoftMVP 山崎](https://www.youtube.com/channel/UCmMFmjhf1BXB1tlLcbkVRrg)
https://www.youtube.com/channel/UCmMFmjhf1BXB1tlLcbkVRrg



以上