Symfonyでマイグレーションを生成・実行する方法を徹底解説!初心者向けDoctrine ORM入門
生徒
「Symfonyでデータベースのテーブルを作るにはどうすればいいんですか?」
先生
「それにはDoctrine ORMという仕組みを使って、マイグレーションという操作を行います。」
生徒
「マイグレーションって何ですか?難しそう…」
先生
「大丈夫。マイグレーションは、データベースの変更を自動で反映する便利な仕組みなんですよ。順を追って一緒にやってみましょう!」
1. Doctrine ORMとマイグレーションとは?
Symfonyでは、Doctrine ORM(ドクトリン・オーアールエム)という機能を使って、PHPのクラスとデータベースのテーブルを結びつけることができます。ORMとは「Object Relational Mapping(オブジェクト関係マッピング)」の略で、難しそうに聞こえるかもしれませんが、実はとても便利な仕組みです。
そしてマイグレーションとは、テーブルの作成や変更の履歴を記録し、コマンド一つでデータベースに反映できる機能のことです。
例えば、「ユーザー情報を保存するテーブルを作りたい」と思ったら、まずPHPのエンティティ(クラス)を作り、その内容に合わせてマイグレーションファイルを自動生成し、実行するだけでOKです。
2. Doctrineの準備をしよう
まずは、Doctrineが使えるようにインストールをしておきましょう。Symfonyのプロジェクトでは、最初から入っていることもありますが、念のため下記のコマンドで確認しておきましょう。
composer require symfony/orm-pack
composer require symfony/maker-bundle
symfony/orm-packはDoctrine本体をまとめてインストールしてくれるパッケージで、maker-bundleはコードを自動生成する便利なコマンドを使えるようにします。
3. データベースの接続設定を確認しよう
次に、Symfonyプロジェクトのルートにある.envファイルを開きましょう。
この中のDATABASE_URLという行が、データベースへの接続情報です。たとえば、SQLiteを使うなら以下のように設定します。
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
MySQLやPostgreSQLを使いたい場合は、接続情報をそれぞれに合わせて変更しましょう。
4. エンティティを作ってみよう
エンティティとは、データベースのテーブルに対応するPHPのクラスです。例えば、ユーザーを表すエンティティを作ってみましょう。
php bin/console make:entity
上記を実行すると、いくつかの質問が出てきます。ここでは次のように答えてみましょう。
- Class name:
User - New field name:
name(string型) - New field name:
email(string型)
すると、src/Entity/User.phpというファイルが生成されます。これがエンティティです。
5. マイグレーションファイルを生成しよう
エンティティを作っただけでは、データベースには反映されません。ここで、マイグレーションファイルを生成して、データベースにテーブルを作成する準備をします。
php bin/console make:migration
このコマンドを実行すると、migrations/ディレクトリに自動でマイグレーションファイルが作られます。中にはSQLに似た形でテーブルを作る内容が書かれています。
6. マイグレーションを実行しよう
最後に、実際にデータベースへテーブルを作成するために、マイグレーションを実行します。
php bin/console doctrine:migrations:migrate
確認メッセージが出てくるので、「Yes(y)」と入力しましょう。これで、Symfonyがエンティティの情報に基づいて、データベースにテーブルを作成してくれます。
[OK] Successfully migrated!
7. データベースに本当に反映されたか確認してみよう
SQLiteを使っている場合は、データベースの中身を確認するために、専用のビューアソフトやコマンドラインツールを使ってみましょう。var/data.dbというファイルができているはずです。
中を見ると、Userテーブルが作成されていることがわかります。
8. Doctrineマイグレーションの注意点
マイグレーションファイルは、何度も自動生成できますが、毎回実行する前に内容を確認することが大切です。間違えて大事なテーブルを削除してしまうこともあるからです。
また、本番環境(公開するサーバ)に反映するときも、同じマイグレーションファイルを使って同じ結果を得られるようになっています。つまり、バージョン管理のような働きをしてくれるのです。
9. よくあるエラーとその対処法
マイグレーション中によくあるエラーに、以下のようなものがあります。
- データベース接続エラー:
DATABASE_URLの設定ミスが原因です。 - すでに同じテーブルが存在する: 手動でテーブルを作った場合に衝突します。
- 権限不足: データベースに書き込み権限がないユーザーで接続している可能性があります。
これらのエラーが出たら、設定ファイルやログを確認して、ひとつずつ問題を取り除きましょう。