0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?