У меня проблема с отношением Many к One к MappedSuperclass в Symfony 5. У меня есть сущности Employee, Employer, которые расширяют абстрактный класс MappedSuperclass Person. И я хочу создать объект raports, который будет связан с человеком (как сотрудником, так и работодателем), как показано ниже:
/**
* @ORM\ManyToOne(targetEntity=Person::class)
*/
private $person;
Но когда я пытаюсь выполнить миграцию pu sh, я получаю следующее сообщение об ошибке:
Имя столбца id
, на которое ссылается отношение из App \ Entity \ Raport к App \ Entity \ Person, не существует.
, но у меня есть свойства id в этих классах:
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
protected $id;
Я нашел на странице Symfony пример создания интерфейса для этого, но у меня он тоже не работает. Может, у кого-то была такая проблема раньше и он знает, как ее решить. Большое спасибо за любой ответ.
EDIT My Person class:
**
* Abstract base class to be extended by my entity classes with same fields
*
* @MappedSuperclass
*/
abstract class Person
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
protected $id; //This property exist in Employee and Employer too (like doctrine documentation said)
Теперь, когда я меняю его с суперкласса на наследование «JOINED», когда я пытаюсь создать сейчас Employee или Employer, я получаю следующее error:
An exception occurred while executing 'INSERT INTO person (discr) VALUES
(?)' with params ["Employee"]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error i
n your SQL syntax; check the manual that corresponds to your MySQL server v
ersion for the right syntax to use near 'person (discr) VALUES ('Employee')'
at line 1
Нет другого способа просто установить связь в одном свойстве с несколькими объектами, которые реализуют один интерфейс или расширяют класс ?? Иногда я ненавижу doctrine ... И мое физическое лицо, возможно, помогает настроить, что не так:
* @ORM\Entity(repositoryClass=PersonRepository::class)
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"person" = "Person", "employee" = "Employee", "employer" = "Employer"})
*/
class Person
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
protected $id;
public function getId(): ?int
{
return $this->id;
}
}