Сопоставление сущности и другой сущности несовместимы друг с другом - PullRequest
1 голос
/ 11 февраля 2020

У меня проблема с моими отношениями между моими сущностями.

Моя первая сущность Пользователь # Билеты:

class User 
{
    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Ticket", mappedBy="user")
     */
    private $tickets;

}

Моя вторая сущность Билеты # ответственный:

class Ticket
{

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="tickets")
     */
    private $user;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="tickets")
     */
    private $responsible;
}

Это дает мне ошибку сопоставления:

Сопоставления App \ Entity \ Ticket # ответственный и App \ Entity \ User # тикеты несовместимы друг с другом.

Если ассоциативное приложение Ответственность \ Entity \ Ticket # - многие-ко-многим, тогда обратная сторона App \ Entity \ User # tickets также должна быть многие-ко-многим.

Но оба поля ManyToMany

1 Ответ

2 голосов
/ 11 февраля 2020

Если одна сторона отношения ManyToOne, то другая сторона отношения должна быть OneToMany.

У вас есть два отношения, идущие от Билета к Пользователю. Одним из них является ManyToOne, где ваше отображение, кажется, говорит: User может иметь много Ticket с.

Эта сторона Ticket::$user, кажется, в порядке:

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="tickets")
 */
private $user; 

Но обратные отношения неправильны, неправильны. Это ManyToMany, но он указывает на ManyToOne. Исправьте это так, что это OneToMany, и оно должно работать.

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Ticket", mappedBy="user")
 */
private $tickets;

У вас также есть ManyToMany при переходе от Ticket к User, но вы пытаетесь использовать это свойство для инверсии отношения, которые не имеют смысла.

Если вы хотите отобразить обратную сторону Ticket::$responsible, вам нужно добавить еще одно свойство к User.

Например:

// User entity
/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Ticket", mappedBy="responsible")
 */
private $tickets_responsibility;
// Ticket entity
/**
 * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="tickets_responsibility")
 */
private $responsible;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...