Doctrine for Symfony4
Symfony4でデータベース連携をする方法は幾つかありますが、ORM MapperとしてDoctrineを用いてMySQLと連携するのが一般的だと思われます。
.envにデータベース接続情報を記述し、Entityにてテーブルおよび絡む情報を記述し、それを基にSynfonyからデータベース操作を実施するという流れになりますが既存のデータベースからEntityを自動生成して適宜修正するのが一番楽なのではないかと個人的には思います。
この辺り、symfony1の頃の記述形式が個人的に楽で視覚的に分かりやすくて気に入っていたのですが、昨今では冗長なyaml構文が多くて少々うんざりしております。
さて、既存のデータベースからEntityを生成するコマンドは下記の通りです。当然ですが、事前に.env等にデータベース接続情報を記述し、かつ、MySQL側にデータベースおよび各テーブルを生成しておく必要があります。
$ php ./bin/console doctrine:mapping:convert --from-database annotation ./src/Entity
上記のコマンドによってデータベース上に存在するテーブルがすべてEntityとして自動生成されます。記述形式はannotationなので事前にcomposer require annonを実行しておいてください。
Entity
自動生成されたEntityは、そのままでは色々と挙動しません。具体的には「getter/setter」が無いためgetValue()やsetValue()みたいな操作が出来ません。
これの解決をするためにはEntityファイルの冒頭に「namespace App\Entity;」と書いて、その上で下記のコマンドを実行する必要があります。
$ bin/console make:entity --regenerate App
これによりgetter/setterが自動的に加筆されますので、以降はgetValue()やsetValue()的なものが利用可能となります。
relationshipが張られているテーブル同士の要素の定義についてですが、前述の「doctrine:mapping:convert」では記述が足りないEntityが生成されます。この辺りは手作業で記述が必要です。
※以下、記述中