🪂

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

2020/12/12に公開

はじめに

私はLaravelを学習するにあたり通称「青本」である
「PHPフレームワーク Laravel入門 第2版」 掌田 津耶乃・著
にて学習をしています。

途中でDBを絡めた学習を進める章があり
そこではSQLiteを使用していまが、私はMariaDBにて学習を進めたかったので
その時に躓いたところを備忘録として、随時記録していきます。

SQLでテーブルを作成する

「SQL利用の場合」の項にてSQLにてテーブルを作成する説明があるのですが
ここでのSQL文はSQLiteでの作成方法なので注意が必要です。
MariaDBにてテーブルを作成するには以下の通り。

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

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

カラムの確認
SHOW columns FROM people;

結果
image.png

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

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

マイグレーションとは

PHPスクリプトさえあればコマンド1つでテーブルの作成や削除ができる。

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

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

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

ex)

マイグレーションを使わない場合:
->毎回何十行ものSQL文を入力
マイグレーションを使う場合:
->たった1行のコマンド入力のみ

この章での注意点

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

リスト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修正)

そうでないと、マイグレーション実行時 (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」テーブルを作成し、確認しましょう。

テーブルの確認
DESC people;

結果
image.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追記)

シーディングとは

マイグレーションではテーブルを作成できました。
それでは作成したテーブルを確認してみましょう。

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

結果
image.png

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

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

MariaDBの場合

ここではMariaDBで特筆することはありません。

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

結果
image.png

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

あとがき

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

Qiitaでの本記事

Discussion