Laravelのモデル作成前にDBを用意して、DBの接続確認を行う
今回からモデルを作成していきます。
このシリーズではモデルはデータを扱うものとして説明していきますが、モデルは他の側面もあるので、そのことは頭の片隅においておいてください。
まずはデータを作る
モデルはデータを扱うものといいましたが、そのデータ自体を始めに用意してやる必要があります。コードを書くのはそれからです。
データベースはMySQL5.7という前提で勧めていきますので、用意しておいてください。
データベース作成
mysqlに接続しデータベースを作成します。
SQL
CREATE DATABASE sample_app;
テーブルの作成
今回は話を簡単にするためusersテーブルだけを作成することにします。
Laravelの場合はテーブル名はすべて複数形でというルールがありますので、userテーブルではなくて、usersテーブルとしています。
SQL
CREATE TABLE `users` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'ユーザID',
`name` varchar(280) NOT NULL DEFAULT "" COMMENT '名前',
`age` int unsigned NOT NULL COMMENT '年齢',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成日',
PRIMARY KEY (`id`)
) COMMENT='ユーザテーブル';
名前と年齢と作成日くらいは用意しておくことにしましょう。
サンプルデータ投入
サンプルデータを一つだけ投入しておきましょう。
SQL
INSERT INTO `sample_app`.`users` (`name`, `age`) VALUES ('takeshi', '20');
※普通のシステムだと、例えばSNSサービスでいうと、usersというテーブルや、ユーザがコメントしたときのcommentsテーブルなど、いいねをしたなどのevaluationsテーブルなど作成したりします。
ちなみにDBクライアントツールは「TablePlus」がオススメです!
UIもオシャレで、操作性も抜群に良いです。使い方を、
【TablePlusの使い方】DB接続してデータ操作をやってみるで紹介しているので、ぜひ使ってみてください。
MySQLとの接続設定
MySQLでデータベース、テーブル、データの用意はできました。
ではどうやってLaravelとMySQLを接続するのでしょう?
接続の設定は「.env」というファイルを使って行っていきます。
.envの設定
.envファイルはプロジェクト直下にあるります。
.envファイルとはLaravelアプリケーション全体で使ういろいろな設定ファイルのことです。
今回はDBに接続したいので、以下のように記述します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=sample_app
DB_USERNAME=root
DB_PASSWORD=xjNPUpj.p51?
お使いの環境に合わせて行ってください。
これの設定だけでDBに接続することが可能になります。
DBの接続確認
設定は終わりましたが、本当にDBに接続できるようになっているのでしょうか?
Laravelには便利なtinkerと呼ばれるものがあり、これを使うことでLaravelのいろいろな処理を呼び出すことができます。
プロジェクト直下で以下のようにコマンドを叩いてみてください。
docker-compose exec laravel.test php artisan tinker
これでtinkerの中に入れました
続いて、以下を実行してください
DB::table('users')->get();
これはusersテーブルのデータを全件取得するというものです。以下のようにデータが取得できていれば、DBへの接続は成功しています。
DB接続失敗の例
ついでに接続失敗した例も見ておきましょう。
.envファイルのDBのパスワードをテキトーなものに変更してみてください。
そしてもう一度tinkerにて以下を実行すると
DB::table('users')->get();
以下のようにDBへのアクセス失敗のエラーがでます。
.envファイルによって、DBへ接続することが出来るということがわかりました。
次回はDBをLaravelのプログラム上(モデル)からアクセスして、データを取得、viewへの表示など行っていきましょう。
LaravelをDBと絡めてプログラムを書いていくのは楽しいですよ〜。