Laravel入門 第2版 Chapter5 をMariaDBで学習するためのメモ
はじめに
私はLaravelを学習するにあたり通称「青本」である
「PHPフレームワーク Laravel入門 第2版」 掌田 津耶乃・著
にて学習をしています。
途中でDBを絡めた学習を進める章があり
そこではSQLiteを使用していまが、私はMariaDBにて学習を進めたかったので
その時に躓いたところを備忘録として、随時記録していきます。
SQLでテーブルを作成する
「SQL利用の場合」の項にてSQLにてテーブルを作成する説明があるのですが
ここでのSQL文はSQLiteでの作成方法なので注意が必要です。
MariaDBにてテーブルを作成するには以下の通り。
CREATE TABLE people (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name TEXT NOT NULL,
mail TEXT,
age INTEGER
);
念のため作成したテーブルの確認
SHOW columns FROM people;
結果
MariaDBでマイグレーション(20-12-14追記)
5-4章ではマイグレーションを実施します。
マイグレーションとは
PHPスクリプトさえあればコマンド1つでテーブルの作成や削除ができる。
環境が変わってもスクリプトファイルをコピーさえしておけば
コマンド一発で同じテーブルが作成できるところがメリット。
以下の場合にマイグレーションを使用するとより効果を発揮。
- 異なるアプリで同じ構成のテーブルを作成したい
- カラムが多く構成が複雑
ex)
マイグレーションを使わない場合:
->毎回何十行ものSQL文を入力
マイグレーションを使う場合:
->たった1行のコマンド入力のみ
この章での注意点
これまで本書の例通り「people」というテーブル名で学習を進めてきた場合に
テーブル生成の処置(リスト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;
結果
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追記)
シーディングとは
マイグレーションではテーブルを作成できました。
それでは作成したテーブルを確認してみましょう。
SELECT * FROM people;
結果
そう、空っぽなんです。
マイグレーションはテーブルは作成できますが、レコードは追加されません。
レコードもマイグレーションのようにコマンド一発で追加できれば便利。
そんな時にシーディング機能です。
MariaDBの場合
ここではMariaDBで特筆することはありません。
「php artisan db:seed」を実行したら
再びpeopleテーブルを確認してみましょう。
結果
きちんとレコードが追加されていますね。
これにてChapter5は以上になります。
あとがき
マークダウン完全に理解した(Qiita初投稿記事)
それ以前に日本語が壊滅的..
Discussion