web-application-framework laravel

LaravelプロジェクトからMySQLを操作するための設定を行います。
Dockerを使用して環境を構築しています。

環境

  • Ubuntu 22.04.3 LTS (WSLで起動している)
  • Docker Engine 26.0.0
  • Laravel 11

前提

  • Laravelプロジェクトを動かすDockerコンテナがある。(Docker Compose使用)
    LaravelプロジェクトをNGINXで動かす方法についてはこちらをご覧ください。

設定の流れ

  1. MySQLのDockerコンテナを作成する。
  2. Laravelの設定を変更する。
  3. 設定の確認をする。

1. MySQLのDockerコンテナを作成する

MySQLのDockerコンテナを作成します。
docker-compose.yml にMySQLコンテナの設定を追加します。

docker-compose.yml :

services:
~略~

  # MySQLコンテナの設定を追加
  db:    # サービス名
    image: mysql:8.0.34
    environment:
      MYSQL_ROOT_PASSWORD: root    # rootユーザーのパスワード
      MYSQL_DATABASE: database    # デフォルトのデータベース名

今回は今後AWSにデプロイすることを考えて、Amazon Auroraに合わせてMySQLサーバーのバージョンを 8.0.34 にしています。

2. Laravelの設定を変更する

MySQLに接続するようにLaravelの設定を変更します。
.env のデータベースに関する環境変数を以下のように変更します。

.env :

DB_CONNECTION=mysql
DB_HOST=db    # MySQLのDockerコンテナのサービス名を指定
DB_PORT=3306
DB_DATABASE=database    # デフォルトのデータベース名を指定
DB_USERNAME=root    # rootユーザー名を指定
DB_PASSWORD=root    # rootユーザーのパスワードを指定

3. 設定の確認をする

MySQLを操作できるか確認します。
新しいテーブルを作成し、Laravelプロジェクトからインサートします。

Dockerコンテナを起動します。
docker-compose.yml のあるディレクトリに移動し、以下を実行します。

$ docker compose up -d --build

Laravelプロジェクトを動かすコンテナに接続します。
<サービス名> はLaravelプロジェクトを動かすコンテナのサービス名です。

$ docker compose exec <サービス名> bash

コンテナ内でLaravelプロジェクトのルートディレクトリに移動します。

# cd <Laravelプロジェクトのルートディレクトリ>

tests テーブルのModelとMigrationを作成します。

# php artisan make:model Test -m

testsテーブルに name カラムを追加します。
<Laravelプロジェクトのルートディレクトリ>/database/migrations/ ディレクトリにある tests テーブルのMigrationファイルのスキーマ定義を以下のように変更します。

~_create_tests_table.php :

Schema::create('tests', function (Blueprint $table) {
    $table->id();
    $table->string('name'); // 追加
    $table->timestamps();
});

<Laravelプロジェクトのルートディレクトリ>/app/Models/Test.php に以下のプロパティを追加します。
create 関数で割り当て可能なカラムを定義するためです。

protected $fillable = [
    'name',
];

MySQLに tests テーブルを作成するために以下を実行します。

# php artisan migrate

アクセスするPHPファイル( index.php あたり)に以下を追加します。

Test::create([
    'name' => 'test',
]);

上記のPHPファイルにブラウザ等でアクセスします。

MySQLの中を確認します。
Laravelプロジェクトを動かすコンテナから抜け、MySQLのコンテナに接続します。

# exit    # Laravelプロジェクトを動かすコンテナから抜ける
$ docker compose exec db bash    # MySQLコンテナに接続

MySQLに接続します。パスワードには root を入力します。

# mysql -u root -p

データベースを選択します。

mysql> use database

tests テーブルを確認します。

mysql> select * from tests;
+----+------+---------------------+---------------------+
| id | name | created_at          | updated_at          |
+----+------+---------------------+---------------------+
|  1 | test | 2024-04-09 08:39:10 | 2024-04-09 08:39:10 |
+----+------+---------------------+---------------------+

id カラムと created_at カラム、updated_at カラムは自動で値が割り当てられます。

Laravelプロジェクトからインサートできたことを確認できました。