@ff0xff

Почему doctrine ссылается на несуществующию колонку?

У меня есть сущность
class ProxyExchange
{
    /**
     * @ORM\Id()
     * @ORM\Column(name="id", type="guid")
     * @ORM\GeneratedValue(strategy="UUID")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\ProxyServer", inversedBy="ip")
     */
    private $proxy;


Окей есть сущность с прокси серверами на которые должно ссылаться поле proxy

class ProxyServer
{

    /**
     * @ORM\Id()
     * @ORM\Column(type="string", length=15, options={"comment":"IPv4 proxy servers"})
     */
    private $ip;

    /**
     * @ORM\Column(type="integer", options={"comment":"Server port"})
     */
    private $port;

    /**
     * @ORM\Column(type="boolean", options={"default" : 1, "comment":"Status 1-on 0-off"})
     */
    private $active;

Это все поля которые есть у таблицы с прокси серверами
Мне нужно что бы поле proxy в ProxyExchange ссылалось на поле ip в ProxyServer

Для этого я пишу
@ORM\ManyToMany(targetEntity="App\Entity\ProxyServer", inversedBy="ip")


Но когда пытаюсь сделать миграцию получаю ошибку
Column name `id` referenced for relation from App\Entity\ProxyExchange towards App\Entity\ProxyServer does not exist.

Я не понимаю какова хера он пытается найти id которого там нет и быть не должно, как это можно исправить кто знает?

  • Symfony 4
  • php 7.2
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
Потому что ManyToMany должен обязательно сопровождаться аннотацией JoinTable.
Если ее не указать, то doctrine допишет ее за вас со значениями по умолчанию, а это поля id в одной и другой сущности. Вот он их и не находит.

P.S. И inversedBy="ip" должен ссылаться на ManyToMany поле с mappedBy свойством. В данном случае, вам его нужно убрать, т.к. у вас unidirectional связь.
Docs.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы