Я новичок в Symfony2 и Doctrine.
У меня есть два класса: пользователь и книга. Каждому пользователю может понравиться очень или совсем не нравится каждая книга в базе данных.
Symfony2 и доктрина: множественные отношения между двумя классами
Чтобы описать эту ассоциацию, я определил три разных отношения 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]
таблица с именем уже существует 'XXX/MyProject/приложение/данные/users.user_book.
На самом деле, я даже не понимаю, если я описывая отношения в неправильном направлении, или если доктрина не может управлять несколько отношений между двумя классами.
Есть ли у кого-нибудь предложения?
Заранее благодарим!
Это на самом деле большой вопрос, и, вероятно, будет полезно много других разработчиков. –