データベースへ接続とは
Laravelがデータベース(以下DB)に接続すると
DBに蓄積されたデータをWEB画面に
表示させることができるため
ブログや通販サイトのように
個別の情報を表示できるようになります
DBにLaravelを接続するには
DBにLaravelを接続するには次の情報が必要です
- 接続先のホスト
- 接続先のポート番号
- データベース名
- ユーザー名 / パスワード
- ソケット(必須ではありません)
上述の情報で次のファイルを修正します
- .envファイル
参照元:[Laravelインストール先] - database.php
参照元:[Laravelインストール先]/config/database.php
接続情報について
接続先のホストとは
データベースが稼働しているサーバーのサーバー名です
サーバーのIPアドレス
を入力することもできます。
お名前.comなどのレンタルサーバーではサーバー名を
公表されていないケースもあり、その場合
コマンドでIPアドレスを確認するか
IPに紐づいたホスト名を確認するコマンドを実行します
ローカルホストの場合は、ホスト名は
localhost
に固定されています。
IPアドレスも127.0.0.1
に固定されています
接続先のポート番号とは
通信をする際の機器の接続口もしくは窓口を指します
銀行や役所で受付する窓口が複数あるように
PCにUSBポートやLANポートなど複数の差込口があるように
DBのデータを受付する窓口も専用のポートが存在するため
Laravel側ではどこにデータを送信するのか
ポート番号つまり送信先を設定する必要があります
ポート番号はMAMPの場合初期が8889
ですが
MAMPの設定画面で簡単に変更することができます
※後述のブラウザからも確認が取れます
データベース名とは
テーブルやレコードなどを格納した
データベースの実名です
MAMPがスタートされている場合は
phpMyAdminが使用できるためデータベース名は
ブラウザ画面で確認できます
DBのユーザー名とパスワード
DBは操作するユーザーごとに操作権限を設定することができ
ユーザーに与えられたユーザー名やパスワードによって
テーブルの閲覧のみや内容の変更までなど詳細な権限を
設定をすることができます
データベースの接続に必要なユーザー名
とパスワード
は
MAMPのMySQLの場合
初期ではどちらもroot
になります
ソケットとは
電球やシガーライターの差込口をソケットと呼びますが
それと同等で通信の接続口
を指します
MySQLでサーバーのDBと通信をする場合
通信の接続口は2種類存在します
- ソケット接続(ローカル通信)
- TCP接続(インターネット通信)
単純にソケット接続の方が通信速度が理論上速いと
されておりソケット接続を用意しなければ
TCP接続になります。よって必ず設定しなくてはいけない
項目ではありません
ソケット接続に切替えるためにはmysql.sock
という
ファイルが必要であり、MAMPにはmyslq.sockが
配置されているためファイルのパスをLaravelに
設定すればソケット接続を使用できます
具体的にdatabase.php
でパスを指定します
Laravelのバージョンによっては
.envファイル
に設定する場合もありますので
適宜対応お願いします
MAMPでの接続情報確認
接続に関する情報はMAMPの場合
WEBサイトから確認できます
LaravelとDBを接続する
LaravelとDBを接続させるには
フレームワーク内に存在する設定ファイルの
DB接続情報を上書きする必要があります
DB接続の設定ファイルは隠しファイル
DBを接続するための情報を入力するファイルは
隠しファイル
のため見えません。
次の操作により隠しファイルを
選択できるように操作します
Macの場合
「command」+「shift」+「.」
DB接続情報を.envファイルに上書きする
Laravelのプロジェクトを開き
隠しファイルの.evnファイル
を開いて
環境変数の値を変更します
環境変数とはOSが参照する値を指し
この場合、Laravelが参照する大元の
設定値になります
MAMPのhtdocsフォルダに作成した
Laravelのプロジェクトを開きます
※開く場合にどのアプリで開くか
求められる場合はテキストエディットなどの
アプリを選択します
DB接続情報を上書きする
開いた.envファイルから上述の
情報を上書きします
- 接続先のホスト
- 接続先のポート番号
- データベース名
- ユーザー名 / パスワード
DB_CONNECTION
デフォルトでmysql
になっているため
mysql以外を使用している場合は変更が必要です
DB_HOST
ホスト名localhost
IPアドレス127.0.0.1
どちらを入力しても問題ありません
DB_PORT
MAMPの場合初期の値は8889
です。
必要であれば適切な値に変更してください
DB_DATABASE
phpMyAdminの画面などで
データベース名をすでに作成している場合は
そのデータベース名を入力します
DB_USERNAME と DB_PASSWORD
MAMPの場合初期値が
root
/root
なので
入力したら上書きします
その他
DBの接続情報は赤枠で囲まれた
DB_****
のみであるため
APP_***やMAIL_***などを編集しても
DBの接続に影響はありません
DB情報をdatabase.phpに上書きする
.envファイルの上書きが済んだなら
database.phpにも情報を上書きします
参照元:[Laravelインストール先]/config/database.php
今回使用するデータベース管理システムは
MySQL
なので赤枠で示したmysql
を編集します
'mysql' => [
~~~~~~省略~~~~
'host' => 'DB_DATABASE','ホスト名',
'port' => 'DB_HOST','ポート番号',
'database' => env('DB_DATABASE', 'データベース名'),
'username' => env('DB_USERNAME', 'ユーザー名'),
'password' => env('DB_PASSWORD', 'パスワード'),
'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
~~~~~~省略~~~~
DBに接続されているか確認する
.env
ファイルに接続情報を入力し上書きすれば
DBと連携する準備は整います。
接続されているかどうかの確認は
以下のコマンドで簡単に確認ができます
php artisan tinker
Laravel環境に標準搭載された対話型シェルです
シェルとはユーザーとOSを繋ぐプログラムの一種で
ユーザーが出した命令をOSに伝える窓口のような
役割を持っています
① カレントディレクトリをLaravelのプロジェクトに設定します
$ cd /Applications/MAMP/htdocs/gakusyuu_sample
② tinkerコマンドを実行してLaravelの対話型シェルを起動します
$ php artisan tinker
DB::connection()->getPdo();
tinker(ティンカー)を使用するとコマンドで
プロジェクト内に存在するプログラムを
動作させることができます
レコードを登録、編集、出力する他
Laravelに記述した設定や関数などの
動作確認をコマンドだけで実行することができます
今回はtinkerを使用しDBが
正常に接続できているかを
確認します
次のコマンドを実行します
$ DB::connection()->getPdo();
-----以下解説------
・DBファザードとはDBに関する関数、プログラム群を指します
・connectionメソッドでデータベースに接続を行います
・getPdoで接続されたDBのサーバー情報を取得します
正しく接続されていない場合
DB::connection()->getPdo();
失敗した場合は接続が拒否されます
tinkerコマンドはexit
で終了することが
できるため、一度終了した後に接続に必要な
設定値を見直してもう一度実行してください
正しく接続された場合
DB::connection()->getPdo();
接続が成功した場合は接続先の
サーバー情報が出力されます
サーバー情報を出力されることが
目的なので、表示される値などは
確認に関係はありません
ソケット情報(パス)を入力しなかった場合
通信方法がTCP/IPになるだけで
特に通信に支障はありません
Unixソケットファイルで作成された接続は
MySQLとデータベースが同じコンピューター上の
サーバーに接続する場合にのみ使用できます
TCP/IPはインターネットを利用して通信する方法であり
Unixソケットは同じマシン上で効率的に通信を
行うことができます
接続情報を確認するコマンド
.envファイルで設定したDBの
接続情報は次のコマンドで確認ができます
※ php artisan tinker を起動した状態でコマンドを実行
> DB::connection()->getConfig();
接続が失敗した場合
次の参考画像ではわざとポート番号を
空欄に設定して接続確認を実行しています
設定値を修正してやり直す場合は
php artisan tinkerをexit
で
終了して再度実行する必要があります