我想制作一个列出专辑的网站,每张专辑都有曲目,为了处理各种艺术家专辑,每个曲目都是由艺术家制作的。 我是symfony的新手,我正在与学说斗争,找到处理这3个实体(专辑,曲目和艺术家)的最佳方式。
我正在考虑与属性进行一对多/多对一关系或多对多关系,但我真的不确定将链接这些关系的最佳方式学说中的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;
感谢您的帮助!
答案 0 :(得分:1)
我认为你的序列有点奇怪。
让我们用人类语言做一些陈述:
多个曲目中存在相册。
一个曲目存在一个曲目。
一个歌曲可以由一个或多个艺术家组成。
我使用实体歌曲,因为歌曲可以放在多个专辑中,也可以放在不同的曲目编号上。
给我们这些关系:
专辑 - oneToMany - 曲目(专辑有多首曲目)
曲目 - ManyToOne - 歌曲(歌曲可以放在多个曲目上)
Song - oneToMany - 艺术家(有些歌曲由多位艺术家制作)