Laravel入門 第2版 Chapter5 をMariaDBで学習するためのメモ

#はじめに
私はLaravelを学習するにあたり通称「青本」である
**[「PHPフレームワーク Laravel入門 第2版」](https://www.amazon.co.jp/dp/B07CLLW4MX/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)**  **　掌田 津耶乃・著**
にて学習をしています。

途中でDBを絡めて学習を進める章があり
そこでは**SQLite**を使用していまが、私は**MariaDB**にて学習を進めたかったので
その時に躓いたところを備忘録として、随時記録していきます。
#SQLでテーブルを作成する
「SQL利用の場合」の項にて**SQLにてテーブルを作成**する説明があるのですが
ここでのSQL文はSQLiteでの作成方法なので注意が必要です。
**MariaDB**にてテーブルを作成するには以下の通り。

```sql:リスト5-1
CREATE TABLE people (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    name TEXT NOT NULL,
    mail TEXT,
    age INTEGER
);
```
<br>

念のため作成したテーブルの確認

```sql:カラムの確認
SHOW columns FROM people;
```

<br>
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883543/b040c98b-f0fa-a323-6293-c48ad9501b75.png)

#MariaDBでマイグレーション(20-12-14追記)

5-4章ではマイグレーションを実施します。

##マイグレーションとは
>**PHPスクリプト**さえあればコマンド1つでテーブルの作成や削除ができる。


環境が変わってもスクリプトファイルをコピーさえしておけば
コマンド一発で同じテーブルが作成できるところがメリット。

以下の場合にマイグレーションを使用するとより効果を発揮。

+ **異なるアプリで同じ構成のテーブルを作成したい**
+ **カラムが多く構成が複雑**

###ex)
<dl>
<dt>マイグレーションを使わない場合：</dt>
<dd>毎回何十行ものSQL文を入力</dd>
<dt>マイグレーションを使う場合：</dt>
<dd>たった1行のコマンド入力のみ</dd>
</dl>


##この章での注意点
これまで本書の例通り「**people**」というテーブル名で学習を進めてきた場合に
テーブル生成の処置(リスト5-31)を例のまま記入して実行するとエラーになります。

```php:リスト5-31
    public function up()
    {
        Schema::create('people', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('mail');
            $table->integer('age');
            $table->timestamps();
        });
    }
```

~~※第1引数を**「people」以外**にしましょう。~~
**※SQLで作成した「people」テーブルを削除しましょう。(20-12-17修正)**

```sql:テーブルの削除
DROP TABLE people;
```

そうでないと、マイグレーション実行時**(php artisan migrate)**にエラーがでます。
>SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'people' already exists

->「people」テーブルはもう存在してて作成できません！　と怒られます。

~~第1引数を仮に「mig_people」に書き換えてマイグレーションを実行してみましょう。
実行後、mig_peopleテーブルが作成されているか確認。~~

SQLで作成した「people」テーブルを削除し
改めてマイグレーションで「people」テーブルを作成し、確認しましょう。

```sql:テーブルの確認
DESC people;
```
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883543/8cfca1d1-0db8-e92f-46d5-2080fd1c819f.png)
~~mig_~~peopleテーブルが作成されていることを確認できました。

##(20-12-17追記)
マイグレーションで「mig_table」という新しいテーブルを作成すると
Chapter6(モデルを利用したレコード追加)でエラーが発生します..

>SQLSTATE[42S22]: Column not found..

エラーの内容はおおよそ以下のようなことを言っています。
「レコード追加したいけど、created_atとupdated_atカラムがないぞ！」

SQLで作成したテーブルには上記のカラムは作成していないのでエラーが出ます。

おとなしくSQLで作成した「people」テーブルを削除して
改めてマイグレーションで「people」テーブルを作成しましょう。

#MariaDBでシーディング(20-12-15追記)
##シーディングとは
マイグレーションではテーブルを作成できました。
それでは作成したテーブルを確認してみましょう。

```sql:peopleテーブルの確認
SELECT * FROM people;
```

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883543/5a5952db-fa61-fe2e-6c30-ce84c86bee06.png)

そう、空っぽなんです。
マイグレーションは**テーブルは作成できますが、レコードは追加されません。**

レコードもマイグレーションのようにコマンド一発で追加できれば便利。
そんな時に**シーディング機能**です。

##MariaDBの場合
ここではMariaDBで特筆することはありません。

「php artisan db:seed」を実行したら
再びpeopleテーブルを確認してみましょう。

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883543/32bf67c2-71c4-61b3-697a-1a2a1ab26473.png)

きちんとレコードが追加されていますね。
これにてChapter5は以上になります。

##あとがき
~~マークダウン完全に理解した~~(Qiita初投稿記事)
それ以前に日本語が壊滅的..:innocent:

[Zennでの本記事](https://zenn.dev/kawazhki/articles/d705728e5f7d7e)