Задать вопрос
@ff0xff

Как в symfony 4 указать ссылку на другую сущбность при связывания в анатациях?

Ребята подскажите, запутался совсем.
Вот у меня есть сущность:
class A{

    /**
     * @ORM\Column(name="system_key", type="string", length=20)
     */
    private $system_key;

}


мне нужно что бы в сущности B в качестве значения поля ставилось значения поля сущности A
class B{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\A", mappedBy="system_key")
     */
    private $exchange;
}

если я ставлю mappedBy то выдает ошибку
does not have a property named "mappedBy". Available properties: ta
rgetEntity, cascade, fetch, inversedBy


как их связать подскажите?
  • Вопрос задан
  • 189 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@sidni
Php Developer
А так
/**
     * @ORM\ManyToOne(targetEntity="App\Entity\A", inversedBy="system_key")
     * @ORM\JoinColumn()
     */
Ответ написан
@dosim86
Связать сущности между собой возможно тольки при участии хотя бы одного первичного ключа этих сущностей, т.к. Doctrine различает сущности, благодаря первичному ключу, как и в теории базы данных в принципе. Таким образом в данном случае поле system_key не характеризует сущность А в целом, а просто является одним из его аспектов наряду с другими полями. То есть нужен критерий по которому можно однозначо различить сущность класса А от другой сущности того же класса. Таким критерием, как уже поняли, и выступает поле id, т.е. первичный ключ по которому различают одну запись от другой

Свойства mappedBy, inversedBy в аннотациях ManyToOne, OneToMany следует указывать только если нужна именно двунаправленная связь между сущностями, т.е. когда В доступен из А и наоборот. Если требуется однонаправленная связь, т.е. достаточно из В получить А, то Doctrine-е надо явно указать связываемые поля через JoinColumn. В данном случае достаточно манипуляции с классом B, например:
class B
{
    /**
     * @ORM\ManyToOne(targetEntity="A")
     * @ORM\JoinColumn(name="a_id", referencedColumnName="id")
     */
    private $address;
}

class A
{
    // ...
}

где, name="a_id" - поле таблицы B, referencedColumnName="id" - первичный ключ таблицы A
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы