このブログは未経験からのエンジニア転職やプログラミングの勉強方法などを発信する、現役エンジニアによるエンジニアのためのトータル技術ブログです。ブログとご一緒にSNSのフォローもよろしくお願いします。

Twitterをフォローする

AWS Cloud9 で Laravel を使ってみる【データベース構築】

Laravel
スポンサーリンク

こんにちは!あっきーです!

Webサイトではデータベースの構築って絶対必要ですよね!
でも、データベースってコマンドラインで構築したり、phpMyAdmin などの専用の管理画面から構築したりで結構大変です。データベース専門のエンジニアがいるくらいに奥が深いものです。

実は Laravel ではデータベースマイグレーションという仕組みがあります。
データベースマイグレーションとは、最初にデータベースを作成するための構造を PHP ファイルで定義することです。

つまり、専用の管理画面などを必要とせず PHP コードからデータベーステーブルの定義、更新、削除をすることができる。

という簡単な仕組みが備わっています。
本日はデータベースマイグレーションを使用するための設定と実際に簡単なデータベーステーブルの作成をしていきます!

AWS Cloud9 で Laravel を使ってみた。【環境構築】
こんにちは!あっきーです! 近頃はプログラミングもWeb系でしたら、専らフレームワークを使っての開発が主流になってきましたね。 僕もつい先日から PHP のフレームワーク Laravel を始めました。 Web系の企業に興...

Laravel がはじめてのかたは、上記の記事を参照に Laravel の実行環境を整えてからこちらの記事を参照してください!

スポンサーリンク

MySQL のバージョンを5.7にアップデートする

最初にデータベースのアップデートを行います。
標準で搭載されている MySQL を使用していきます。

実は MySQL はなにもしなくても目でみえないところでずっとプログラムが動いています。
ですのでいったん動作をとめてからアップデートを行いましょう。

・MySQL を止める

ターミナル

・現在の MySQL のバージョンを削除する

ターミナル

実行結果:

Complete! の文字が出れば無事削除完了です。

・新しいバージョンの MySQL をインストールする

ターミナル

実行結果:

これもまた Complete! の文字が出れば無事インストール完了です。

・MySQL を起動する

ターミナル

・MySQL のバージョンを確認する

ターミナル

実行結果:

バージョンが5.7以上になっていれば完了です。

データベースを作成する

・MySQL にログインする

ターミナル

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

このエラーが出たときは MySQL が起動してないため起こるエラーです。
$ sudo service mysqld start
コマンドを忘れていないか確認してください。

あとパスワードを求められるかと思いますが、空白で Enter 押しちゃってください。

・データベースを作成する

ターミナル

今回は laravel という名前のデータベースを作成しました。
・作成したデータベースを確認する

ターミナル

実行結果:

「laravel」という名前のデータベースがあることを確認します。

・作成したデータベースを選択する

ターミナル

・データベーステーブルを確認する

ターミナル

実行結果:

Empty set (0.00 sec)

とありますのでまだテーブルはないことが確認できます。
ここからデータベースマイグレーションでテーブルを作成していきますので MySQL からログアウトします。

・MySQL からログアウト

ターミナル

データベースマイグレーションでテーブル作成する

いよいよマイグレーションデータベースを作成していきます。
以下の手順で行っていきます。

①マイグレーションファイルを作成する
②マイグレーションファイルの構造を確認する
③マイグレーションファイルに追加記述する
④バージョンによる不具合を修正する
⑥マイグレーションを実行する
⑦MySQL にて実行確認する

マイグレーションファイルを作成する

テーブルをつくっていくのですが、せっかくなのでなにかシチュエーションで考えた方がいいかと思いましたので、

「本の販売管理システムを構築」

こんな前提でテーブルを作っていこうと思います。

・ファイル作成

ターミナル

※「create_books_table」というファイルを作成しました。
※「books」という名前のテーブルを作成しました。

実行結果:

「database/migrations/」のディレクトリの配下に 「create_books_table.php」というファイルが作成されたことが確認できます。

マイグレーションファイルの構造を確認する

マイグレーションコマンドを実行すると作成したファイル内に「up」「down」の2つのメソッドが作成されていることを確認できます。

create_books_table.php

マイグレーションファイルに追加記述する

「create_books_table.php」ファイルに記述を追加していきます。
「本の販売管理システムを構築」の前提に沿ったテーブルを検討します。

今回は必要最低限ということで

・本の名前
・在庫
・金額
・出版日

上記4カラム追加します。

・本の名前 == name
・在庫        == number
・金額        == price
・出版日  == published

という名前のカラムを作成します。

create_books_table.php

上記のようにカラムをファイルに追加してください

IDE 画面で確認するとこんな感じです。

バージョンによる不具合を修正する

※Laravel 5.4 以上を使用しているかたは実行してください。

解説:
Laravel 5.4 以上から標準の charset が utf8mb4 に変更され、標準の varchar(255) が設定されていると Cloud9 のMySQL バージョンではエラーになるため varchar(191) に変更することで解消しています。

app/Providers/AppServiceProvider.php
画像のパスのファイルに対して修正を行ってください。

マイグレーションを実行する

ここでテーブルを作成します

・テーブルを作成する

ターミナル

多分ここでエラーになります。
教材通りに進めていたら僕もここらでエラーはまりました。エラー内容は以下です。

Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost'・・・
・・・中略1 PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)")
/home/ec2-user/environment/test/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:702 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=homestead", "homestead", "secret", [])
/home/ec2-user/environment/test/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

やんわりエラー内容みるとこんな感じのこといってるきがします。

・データベースの接続拒否するよ。
・理由としてはユーザー名が違うよ。
・あと、君データベースの接続のときにデータベースの名前は「homestead」でパスワードは「secret」らしいじゃん。

てことでみなさん思い出してみてください。
MySQLにログインするときに「homestead」なんてユーザー名記述しましたっけ?
パスワードに「secret」なんて記述しましたっけ?

多分ここらに原因がありそうですね。
エラー解析していきましょう。

エラー対応

データベースの設定は2ヶ所あります。
「config/database.php」と「.env」ファイルの2つです。

基本的に「database.php」よりも「.env」ファイルの設定のほうが優先されるため「database.php」の訂正が上書きされている場合があります。

つまりデータベースの設定は「.env」ファイルで行いましょう。

だがしかし!

「.」から始まるファイルは隠しファイルといい、デフォルトで表示されていない場合もあります。
しかも「.env」がない場合もあるらしいです。(これは本当かどうか実際知りませんw)

ファイルが見当たらない場合、隠しファイルを表示させる設定をまず行いましょう。
それでなければ「.env.example」ファイルから「.env」ファイルをコピーするようです。

・隠しファイルを表示する

メニューバーの歯車マークから「Show Hidden Files」をチェックします。
すると赤線あたりに「.env」ファイルが表示されます。

・.env.exampleファイルから.envファイルをコピーする。

ターミナル

・.envファイルの中身を確認する

画像の枠の部分をみると設定した覚えのないデータベースの名前とかパスワードが入ってますね。
MySQL にログインしたときは「mysql -u root -p」とコマンドを入力したと思います。

これは ユーザーネームは「root」パスワードは「空白」という意味です。
あとデータベースの名前が「homestead」になってますが「laravel」で作成しましたよね。

以上を踏まえて

.env

に設定を変更してください。
そしてもういちどマイグレーションコマンドを実行します。

ターミナル

実行結果:

「create」とかの文字が表示されているので成功してるみたいですね。

これでテーブル作成完了です。

MySQL にて実行確認する

最後に MySQL に接続して実行確認をします。

・MySQL にログインする

ターミナル

・作成したデータベースを選択する

ターミナル

・データベーステーブルを確認する

ターミナル

実行結果:

先ほど追加したカラムが設定されていることが確認できます。

これでマイグレーションデータベースでのテーブル作成は完了です。

さいごに

結構エラーはまった経緯なども書いて難しそうにみえたかもしてませんがしっかり理解していればつまずくこともないことだろうと思います。

今後 Laravel を学習する際の参考になれば幸いです。

スポンサーリンク
あっきー

元キャバクラ店長から未経験でエンジニアに転職した異端児。

自分の経験を元に、エンジニア転職や未経験からでも挫折しないプログラミングの勉強方法の発信をしてます。

あっきーをフォローする
LaravelMySQLPHP
\良い記事だったらシェアしてね!/
スポンサーリンク
駆け出しエンジニアのつぶやき