我冻胀这个有些头痛,我没有找到解决办法。Symfony2的和教条多对多realtionship
我有2个实体:Movie.php和Category.php
我想一部电影有多个类别,反之亦然。这就是我选择ManyToMany关系的原因。
现在我想知道......在数据库站点会发生什么?是否有一个将movie_ids映射到category_ids的“中间”表?但事实并非如此。其实我的第一个尝试是制作一个MovieCategory实体 - 我用OneToMany将一个电影映射到多个类别,并在MovieCategory实体中创建OneToOne连接,以从我的类别实体中获取类别名称。但我想这不是它应该如何工作,我是对的吗?
现在,这里是我的我怎么想它应该工作的代码,我非常感谢所有帮助我能在此:
Movie.php
<?php
/**
* @ORM\Table(name="movies")
* @ORM\HasLifecycleCallbacks()
*/
class Movie
{
public function __construct()
{
$this->categories = new ArrayCollection();
}
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @ORM\Column(type="string") */
protected $moviename;
/**
* @ORM\ManyToMany(targetEntity="Category", mappedBy="movie")
*/
protected $categories;
}
Category.php
<?php
/**
* @ORM\Table(name="categories")
* @ORM\HasLifecycleCallbacks()
*/
class Category
{
public function __construct()
{
$this->movies = new ArrayCollection();
}
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
// ...
/**
* @ORM\ManyToMany(targetEntity="Movie", mappedBy="movie", cascade={"persist"})
*/
protected $movies;
}
为什么拍电影有很多类别?一部电影不能同时成为“恐怖”和“戏剧”,而是一个。我不认为你需要电影和类别之间的多对多关系。它应该是多对一的从电影到类别,以及从类别到电影的一对多 – jere 2012-02-10 14:24:01
ManyToMany关系可能是一个真正的痛苦,因为Doctrine确实创建了一个连接表。很多majic正在进行。只需创建自己的连接实体(MovieCategory)然后与它建立OneToMany关系会更容易。特别是你想要在连接实体上挂上额外的属性。 – Cerad 2012-02-10 14:40:30
@Cerad:但是如果你不需要或想要任何挂在MovieCategory上的数据(或者在我的情况下是UserRole),使用“majic”很容易/很容易。我知道它在做什么,它是如何做到的。我不记得注释命令:/ PS:使这个注释主要用于提供信息的注释。 (我是一个最终会经常寻找信息的人,所以我喜欢当人们提出这样的评论时) – Rixius 2013-02-22 16:02:14