アーティスト情報とそのアーティストのアルバム情報を格納するDBを作成した。
アルバムテーブルは「artist_id」カラムを持ち、このカラムがアーティストテーブルのidとのリレーションを持つ。
Symfonyのアノテーションでこのリレーション設定をした時の備忘。
前提としてリレーション設定されている両エンティティにアノテーション設定をする必要がある。
アーティスト情報のリレーション設定
アルバム情報とはOneToManyの関係にある。
基本的なプロパティ設定は行なっている前提で、リレーションに関係ある部分だけを記載する。
// 初期化したする時にArrayCollectionを使用する
use Doctrine\Common\Collections\ArrayCollection;
// AlbumエンティティのArtistプロパティに対応する。
/**
* @ORM\OneToMany(targetEntity="Album", mappedBy="Artist")
*/
private $album;
// アルバム情報をArrayCollectionにセット
public function __construct()
{
$this->album = new ArrayCollection();
}
アルバム情報のリレーション設定
アーティスト情報とはManyToOneの関係にある。
基本的なプロパティ設定は行なっている前提で、リレーションに関係ある部分だけを記載する。
// Artistエンティティのalbumプロパティに対応する。
/**
* @ORM\ManyToOne(targetEntity="Artist", inversedBy="album")
* @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
*/
private $Artist;
// ゲッターとセッター。
/**
* Set Artist
*
* @param \AppBundle\Entity\Artist $artist_id
* @return \AppBundle\Entity\Artist
*/
public function setArtist(\AppBundle\Entity\Artist $artist_id)
{
$this->Artist = $artist_id;
return $this;
}
/**
* Get Artist
*
* @return \AppBundle\Entity\Artist
*/
public function getArtist()
{
return $this->Artist;
}
Controller
Albumコントローラでテーブルの一覧を取得する。
public function index()
{
// Albumの一覧を取得
$em = $this->getDoctrine()->getManager();
$AlbumRepository = $em->getRepository('AppBundle:Album');
$AlbumLists = $AlbumRepository->findAll();
return $this->render('Album/index.html.twig', array(
'AlbumLists' => $AlbumLists,
));
}
Twigでの指定
<td>{{ AlbumList.id }}</td>
<td>{{ AlbumList.Artist.nameJa }}</td>