LoginSignup
0
0

More than 1 year has passed since last update.

【Laravel,MySQL】LaravelからDBへの接続エラーの原因と解決策

Last updated at Posted at 2022-01-10

概要

本記事は、PHPフレームワークLaravel入門 第2版で学習している中の疑問・つまづきの備忘録です。

今回はLaravelからDBへの接続エラーの原因と解決策についてまとめます。
なお、PHPフレームワークLaravel入門 第2版ではSQLiteを利用していますが、MySQLに読み替えて同じことを行なっています。

発生したエラー

peopleテーブルのレコードを全件検索しようとした際に、下記のエラーが発生しました。
スクリーンショット 2022-01-10 10.44.44.png

ソースコード

HelloController.php
/////////一部抜粋

use Illuminate\Support\Facades\DB;

class HelloController extends Controller
{
    public function index(Request $request)
    {
        $items = DB::select('select * from people'); ////ここでエラー発生
        return view('hello.index', ['items' => $items,]);
    }

PHPフレームワークLaravel入門 第2版

原因

.envに設定していたDB_HOSTが誤っていました。

#.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1    #######ここが原因
DB_PORT=3306
DB_DATABASE=laravel_practice
DB_USERNAME=sail
DB_PASSWORD=password

なぜDB_HOST=127.0.0.1ではだめだったのか

127.0.0.1は、自分自身を指す特別なIPアドレスです。ここではLaravelが動いているホスト自身を指します。
しかしMySQLが動いているのは別のホストであり、そちらを指定してやる必要がありました。

MySQLのホストを調べるには、docker psコマンドを使用します。
出力結果のNAMESを確認すると、別コンテナで動いていることがわかります。


$ docker ps

////出力結果は一部抜粋

CONTAINER ID   IMAGE                         COMMAND                  CREATED      STATUS                PORTS                                            NAMES
286f413a566c   sail-8.1/app                  "start-container"        8 days ago   Up 8 days             0.0.0.0:80->80/tcp, 8000/tcp                     laravel-practice_laravel.test_1
77c6251fe186   mysql/mysql-server:8.0        "/entrypoint.sh mysq…"   8 days ago   Up 8 days (healthy)   0.0.0.0:3306->3306/tcp, 33060-33061/tcp          laravel-practice_mysql_1

解決策

.envに設定していたDB_HOSTを修正します。

#.env

DB_CONNECTION=mysql
DB_HOST=laravel-practice_mysql_1    #######ここをMySQLが動くコンテナ名に修正
DB_PORT=3306
DB_DATABASE=laravel_practice
DB_USERNAME=sail
DB_PASSWORD=password

ちなみに、DB_HOST=mysqlに設定することでも接続可能です。

コンテナを起動したら、アプリケーションの.envファイル内のDB_HOST環境変数をmysqlに設定することで、アプリケーション内のMySQLインスタンスに接続できます。
Laravel 8.x Laravel Sail

参考文献

PHPフレームワークLaravel入門 第2版
Laravel 8.x Laravel Sail

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