Symfony2和条令许多关系

Symfony2和条令许多关系,symfony,doctrine-orm,Symfony,Doctrine Orm,我对此感到有些头痛,但我没有找到解决办法 我有两个实体:Movie.php和Category.php <?php /** * @ORM\Table(name="categories") * @ORM\HasLifecycleCallbacks() */ class Category { public function __construct() { $this->movies = new ArrayCollection(); } /** * @ORM\Id *

我对此感到有些头痛,但我没有找到解决办法

我有两个实体:Movie.php和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;


}
我希望一部电影有多个类别,反之亦然。这就是为什么我选择了很多种关系

现在我想知道。。。数据库站点上发生了什么?是否有一个将电影ID映射到类别ID的“中间”表?但事情不是这样。实际上,我的第一次尝试是制作一个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;

}

您在两个声明中对mappedBy使用相同的值。另外,您使用的值是单数,应该是复数。这是行不通的

根据它的说法,应该这样看:

// Movie.php
/**
 * @ORM\ManyToMany(targetEntity="Category", inversedBy="movies")
 * @ORM\JoinTable(name="movies_categories")
 */
protected $categories;

// ...

// Category.php
/**
 * @ORM\ManyToMany(targetEntity="Movie", mappedBy="categories")
 */
protected $movies;

为什么一部电影有很多类别?一部电影不能同时是“恐怖”和“戏剧”,两者都是。我不认为电影和分类之间需要多对多的关系。从一部电影到另一部电影,它应该是多对一的,从一部电影到另一部电影,多对多的关系可能是一个真正的痛苦,因为条令确实创建了一个联接表。很多重大事件正在发生。只需创建自己的加入实体(MovieCategory)并与之建立OneToMany关系就更容易了。尤其是当您想在连接实体上挂起其他属性时。@Cerad:但是,如果您不需要或不想在MovieCategory(或在我的情况下是UserRole)上挂起任何数据,只需使用“majic”就可以了。我知道它在做什么,它是怎么做的。我只是记不起注释命令:/PS:这条注释主要是为了提供信息。(我是一个经常寻找信息的人,所以我喜欢人们发表这样的评论)+1你是个和蔼可亲的人。我花了好几个小时想弄明白。。。谢谢!:)我猜链接已更新为: