[Symfony2]ManyToOneリレーションをアノテーションに設定

アーティスト情報とそのアーティストのアルバム情報を格納する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>

参考

How to Work with Doctrine Associations / Relations

Association Mapping

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

13 + 15 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください