Doctrine 的多对多逻辑让我有点困惑。我有一个非常简单的食谱与类别的多对多关系。我的基础实体类同样简单。
配方实体类...
class Recipe
{
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="categories")
* @ORM\JoinTable(name="recipe_category")
**/
private $categories;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
public function __construct() {
$this->categories = new \Doctrine\Common\Collections\ArrayCollection();
}
}
和类别实体类...
class Category
{
/**
* @ORM\ManyToMany(targetEntity="Recipe")
**/
private $recipes;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
public function __construct() {
$this->recipes = new \Doctrine\Common\Collections\ArrayCollection();
}
}
看起来很困难,并且与 Doctrine(和 Symfony2 的)文档示例相匹配。当我尝试通过 Symfony 控制台应用程序为这些类生成 getter 和 setter 时,就会出现奇怪的行为。
关系设置器/获取器不正确。以生成的 Recipe 类中的 Category 设置器为例...
/**
* Add categories
*
* @param \Namespace\CookbookBundle\Entity\Category $categories
* @return Recipe
*/
public function addCategorie(\Namespace\CookbookBundle\Entity\Category $categories)
{
$this->categories[] = $categories;
return $this;
}
看起来方法名称的自动生成功能已关闭。它应该是“addCategory”并且应该传递一个“类别”。
虽然我可以手动更正此问题,但如果我重新运行实体生成器,它只会再次添加它们。
我做错了还是这只是实体生成器的怪癖?我可以通过注释指定覆盖吗?