Symfony 3个关联实体的条令属性

Symfony 3个关联实体的条令属性,symfony,doctrine,Symfony,Doctrine,我想做一个网站,列出专辑,每个专辑都有曲目,为了处理不同的艺术家专辑,每个曲目是由一个艺术家。 我是新加入symfony的,我正在与教义斗争,以找到处理这3个实体的最佳方法:专辑、曲目和艺术家 专辑id、标题、发行日期、封面等。。。 曲目id、专辑id、艺术家id、标题、位置、持续时间 艺术家id、姓名、国家、照片,。。。 我在考虑做一对多/多对一关系或多对多属性,但我真的不确定在理论中什么是连接这三个实体的最佳方式 最后,我想制作一个如下所示的主页: [album_cover] "album

我想做一个网站,列出专辑,每个专辑都有曲目,为了处理不同的艺术家专辑,每个曲目是由一个艺术家。 我是新加入symfony的,我正在与教义斗争,以找到处理这3个实体的最佳方法:专辑、曲目和艺术家

专辑id、标题、发行日期、封面等。。。 曲目id、专辑id、艺术家id、标题、位置、持续时间 艺术家id、姓名、国家、照片,。。。 我在考虑做一对多/多对一关系或多对多属性,但我真的不确定在理论中什么是连接这三个实体的最佳方式

最后,我想制作一个如下所示的主页:

[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;

谢谢你的帮助

我觉得你的顺序有点奇怪

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

一张专辑存在于多个曲目中

一首歌中有一首曲目

一首歌可以由一个或多个艺术家创作

我使用实体歌曲是因为一首歌曲可以放在多个相册和不同的曲目号上

让我们了解这些关系的重要性:

唱片集-oneToMany-曲目唱片集有多个曲目

曲目-多首歌曲-一首歌曲可以放在多个曲目上

一些歌曲是由多个艺术家创作的


嗨,弗兰克,谢谢你的回答。你的说法是有道理的,但在我的案例中,由不同艺术家创作的一首歌是罕见的——这是一个chiptune音乐数据库,我从未见过任何由一个以上艺术家创作的曲目,因此我不想让逻辑变得更复杂。所以我的模型是一张由多首曲目组成的专辑,每首曲目都是由一位艺术家创作的。谢谢
/**
* 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;