我是Symfony2和Doctrine的新手
我有两个类:User和Book。每个用户都非常喜欢或非常喜欢数据库中的每本书。
为了描述这种关联,我在两个类之间定义了三种不同的ManyToMany关系。
以下是我的代码摘录:
这是班级用户
<?php
namespace MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="MyBundle\Entity\UserRepository")
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=64, unique=true)
*/
private $username;
/**
* @ORM\ManyToMany(targetEntity="Book", inversedBy="user_likemuch")
* @ORM\JoinColumn(name="book_id", referencedColumnName="id")
*/
protected $books_likemuch;
/**
* @ORM\ManyToMany(targetEntity="Book", inversedBy="user_likequite")
* @ORM\JoinColumn(name="book_id", referencedColumnName="id")
*/
protected $books_likequite;
/**
* @ORM\ManyToMany(targetEntity="Book", inversedBy="user_dislike")
* @ORM\JoinColumn(name="book_id", referencedColumnName="id")
*/
protected $books_dislike;
public function __construct()
{
$this->books_likemuch = new ArrayCollection();
$this->books_likequite = new ArrayCollection();
$this->books_dislike = new ArrayCollection();
}
}
这是课堂书:
<?php
namespace MyBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Book
*
* @ORM\Table(name="book")
* @ORM\Entity(repositoryClass="MyBundle\Entity\BookRepository")
*/
class Book
{
/**
* @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=64)
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="books_likemuch")
*/
protected $user_likemuch;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="books_likequite")
*/
protected $user_likequite;
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="books_dislike")
*/
protected $user_dislike;
public function __construct() {
$this->user_likemuch = new ArrayCollection();
$this->user_likequite = new ArrayCollection();
$this->user_dislike = new ArrayCollection();
}
}
但是,当我尝试通过
更新数据库的模式时php app/console doctrine:schema:update --force
我收到以下错误:
[学说\ DBAL \架构\ SchemaException]
名称为&#39; XXX / myproject / app / data / users.user_book&#39;已经存在。
实际上,我甚至不理解我是否以错误的方式描述了这种关系,或者是否学说无法管理两个类之间的多种关系。
有没有人有任何建议?
提前谢谢!
答案 0 :(得分:3)
学说确实可以管理多种关系。典型的例子是用户和角色之间。这里的问题是您尝试在同一个两个实体之间创建多个ManyToMany关系。什么原则将管理这些关系是创建一个&#34;加入&#34;表使用约定table1_table2,或在您的情况下&#34; user_book&#34;。因此,您获得Doctrine错误的原因表面上是因为它试图创建相同的表3次。
我认为你想要做的就是有3个单独的ManyToMany&#34;加入&#34;桌子,一个像喜欢,喜欢和不喜欢。因此,请尝试为每个关联指定连接表,看看是否有帮助。例如:
/**
* @ORM\ManyToMany(targetEntity="Book", inversedBy="user_likemuch")
* @ORM\JoinColumn(name="book_id", referencedColumnName="id")
* @ORM\JoinTable(name="user_book_likemuch")
*/
protected $books_likemuch;
请参阅ManyToMany关系的双向关联映射部分:Doctrine Association Mapping