LoginSignup
1
0

More than 3 years have passed since last update.

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

Last updated at Posted at 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修正)

テーブルの削除
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」テーブルを作成し、確認しましょう。

テーブルの確認
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初投稿記事)
それ以前に日本語が壊滅的..:innocent:

Zennでの本記事

1
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
1
0