LoginSignup
0
0

Doctrine のインストールからマイグレーションまで(Symfony 5.4)

Posted at

この記事は、以下の環境で動作確認しています。

OS: macOS Venture 13.3.1
Chip: Apple M1 Pro
PHP: 8.1.19
Symfony: 5.4.24

参考

以下の公式ドキュメントを参考にしています。

Doctrineのインストール

まずは以下を実行。

symfony composer require symfony/orm-pack

環境によって、依存パッケージのエラーが出力される可能性があります。

Your requirements could not be resolved to an installable set of packages.

各パッケージに必要なバージョンを探索してくれるように--with-all-dependenciesのオプションを付与します。

symfony composer require symfony/orm-pack --with-all-dependencies

MakerBundleのインストール

symfony composer require --dev symfony/maker-bundle

Databaseの構成

symfony/orm-packをインストールすると、おそらくdocker-compose.ymlファイルが自動生成されています。(なければ作成する必要あり。)

デフォルトでpostgresの構成で記述されているのでPOSTGRES_USERPOSTGRES_PASSWORDのみ任意の値に変更して起動します。

# docker-compose.yml
version: "3"

services:
  database:
    image: postgres:${POSTGRES_VERSION:-15}-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-app}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
      POSTGRES_USER: ${POSTGRES_USER:-user}
    volumes:
      - database_data:/var/lib/postgresql/data:rw

volumes:
  database_data:

ドキュメントに記載のように、.envファイルも忘れず修正します。

DATABASE_URL="postgresql://user:password@127.0.0.1:5432/app?serverVersion=15&charset=utf8"

コンテナを起動します。

docker-compose up -d

Databaseの作成

Databaseを作成します。

symfony php bin/console doctrine:database:create

ただし、docker-compose upのタイミングで作成済みの為かエラーが出力されます。

An exception occurred while executing a query: SQLSTATE[42P04]: Duplicate database: 7 ERROR: database "app" already exists

以下コマンドで確認すると、確かに作成されてそう!

docker exec -it container_id psql -U database_user database

問題なさそうなので、Entityの作成に進みます。

Entityクラスの作成

ここはドキュメントに沿ってコマンドを実行し、各設定値もドキュメントに従います。

symfony php bin/console make:entity

マイグレーションファイルの生成と実行

symfony php bin/console make:migration

上記コマンドでマイグレーションファイルが生成されるので、つづけて実行します。

symfony php bin/console doctrine:migrations:migrate

[OK] Successfully migrated to version : DoctrineMigrations\VersionXXX

テーブルが作成できたはずなので、確認します。

docker exec -it container_id psql -U database_user database

もう一度、コンテナに接続して、\dt\d productを実行すると確かに想定通りのテーブルが生成されています。

Column Type Collation Nullable Default
id integer not null
name character varying(255) not null
price integer not null

まとめ

テーブル定義に変更があった場合でも、以下の流れは変わりません。

  • Entityクラスの作成
  • マイグレーションファイルの作成
  • マイグレーション実行

コマンドベースでは以下の順序です。

# 1: Entityクラスの作成
symfony php bin/console make:entity

# 2: マイグレーションファイルの作成
symfony php bin/console make:migration

# 3: マイグレーション実行
symfony php bin/console doctrine:migrations:migrate
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