3个链接实体的学说属性

时间:2017-04-30 17:33:44

标签: symfony doctrine

我想制作一个列出专辑的网站,每张专辑都有曲目,为了处理各种艺术家专辑,每个曲目都是由艺术家制作的。 我是symfony的新手,我正在与学说斗争,找到处理这3个实体(专辑,曲目和艺术家)的最佳方式。

  • 专辑(id,title,release_date,cover等等)
  • 跟踪(id,id_album,id_artist,标题,职位,持续时间)
  • 艺术家(身份证,姓名,国家,照片,......)

我正在考虑与属性进行一对多/多对一关系或多对多关系,但我真的不确定将链接这些关系的最佳方式学说中的3个实体。

最后,我想制作一个看起来像这样的主页:

[album_cover] 
"album title"
   artist

[album_cover]
"album title"
artist1, artist2

因此,从专辑实体中我需要从所有专辑的曲目中获取所有艺术家,我还不知道如何做到这一点。

到目前为止,我已经做到了,但我真的不确定它是否是最佳方式(使用AlbumArtist = Track):

/**
* Album
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\AlbumRepository")
*/
class Album
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\OneToMany(targetEntity="AlbumArtist", mappedBy="album", cascade={"persist"})
 */
private $albumArtists;

/**
 * @var string
 *
 * @ORM\Column(name="title", type="text")
 */
private $title;
/**
* Artist
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\ArtistRepository")
*/
class Artist
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\OneToMany(targetEntity="AlbumArtist", mappedBy="artist", cascade={"persist"})
 */
private $albumArtists;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="text")
 */
private $name;
/**
* AlbumArtist
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\AlbumArtistRepository")
*/
class AlbumArtist
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\ManyToOne(targetEntity="Album", inversedBy="albumArtists")
 * @ORM\JoinColumn(name="album_id", referencedColumnName="id")
 */
private $album;

/**
 * @ORM\ManyToOne(targetEntity="Artist", inversedBy="albumArtists")
 * @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
 */
private $artist;

/**
 * @var string
 *
 * @ORM\Column(name="title", type="text")
 */
private $title;

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为你的序列有点奇怪。

让我们用人类语言做一些陈述:

  

多个曲目中存在相册

     

一个曲目存在一个曲目

     

一个歌曲可以由一个或多个艺术家组成。

我使用实体歌曲,因为歌曲可以放在多个专辑中,也可以放在不同的曲目编号上。

给我们这些关系:

  

专辑 - oneToMany - 曲目(专辑有多首曲目)

     

曲目 - ManyToOne - 歌曲(歌曲可以放在多个曲目上)

     

Song - oneToMany - 艺术家(有些歌曲由多位艺术家制作)