Доктрина / Symfony - Наследование - Отношения

У меня две сущности: Individualu (Индивидуальный) и Epoux_se (Муж) Муж расширяет индивидуальную

class Individu
{
/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name = "nom", type = "string", length=30)
 */
private $nom;

/**
 * @ORM\OneToOne(targetEntity = "AppBundle\Entity\Individu", cascade = {"persist"})
 * @ORM\JoinColumn(name = "pere_id", referencedColumnName = "id", onDelete = "CASCADE")
 */
private $pere;

public function __construct($nom, $prenoms, $sexe)
{
    $this->nom = $nom;
    $this->prenoms= $prenoms;
    $this->sexe = $sexe;
    $this->actes = new \Doctrine\Common\Collections\ArrayCollection();
}

И классный Муж

class Epoux_se extends Individu
{
/**
 * @var int
 *
 * @ORM\Column(name = "id", type = "integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy = "AUTO")
 */
private $id;

public function __construct($nom, $prenoms, $sexe, $lieuOrigine, $dateNaissance, $age)
{
    parent::__construct($nom, $prenoms, $sexe);
    $this->lieuOrigine = $lieuOrigine;
    $this->dateNaissance = $dateNaissance;
    $this->age = $age;
}

Когда я импортирую DataFixtures

new Epoux_se("Aurel", ["Jean-Christophe", "Marc"], "M", "Saint-Malo", "05/08/1722", 22);

У меня ошибка конструктора Мужа

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pere_id' in 'field list'

An exception occurred while executing 'INSERT INTO epoux_se (nom, prenoms, sexe, profession, pere_id, mere_id, lieu Origine, dateNaissance, age) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["Aurel", "a:2:{i:0;s:15:\"Jean-Christ ophe\";i:1;s:4:\"Marc\";}", "M", null, null, null, "Saint-Malo", "05/08/1722", 22]:

Светильники:

$marie = new Individu("Duhamel", ["Ophelia", "Carmène"], "F"); 
$manager->persist($marie); 
$epoux_se = new Epoux_se("Aurel", ["Jean-Christophe", "Marc"], "M", "Saint-Malo", "05/08/1722", 22); 
$manager->persist($epoux_se); 
$manager->flush(); 

Как сделать ? Спасибо !

Вы можете показать, как вы создаете светильники?

Alessandro Minoccheri 19.06.2018 10:12

$ marie = новый Индивидуу («Дюамель», [«Офелия», «Кармен»], «F»); $ менеджер-> настойчиво ($ мари); $ epoux_se = new Epoux_se («Аурель», [«Жан-Кристоф», «Марк»], «М», «Сен-Мало», «05.08.1722», 22); $ менеджер-> сохранить ($ epoux_se); $ менеджер-> flush ();

Benjamin Le Gallo 19.06.2018 10:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
2
245
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Измените видимость атрибутов родительского класса на защищенный. А затем обновите схему своей базы данных.

Не работает, я отбрасываю свою базу данных и обновляю, а затем импортирую DataFixtures, но у меня та же проблема. Я пробую с общедоступным и защищенным для каждого атрибута в сущности Индивидуальный и Муж.

Benjamin Le Gallo 19.06.2018 10:58

Не понимаю, что поле, вызывающее проблему, является полем отношения. У меня также есть определенные сущности, расширяющие их базовые, и мне пришлось переопределить атрибуты, которые являются отношениями в дочернем классе. Для стандартных «простых» атрибутов наследование работает, но для отношений кажется, что это не так.

Carlos 19.06.2018 11:02
Ответ принят как подходящий

Я нашел решение! Над Индивидуальным объектом необходимо добавить следующую аннотацию

  • @ORM\InheritanceType("JOINED")
/**
* Individu
*
* @ORM\InheritanceType("JOINED")
*
* @ORM\Entity(repositoryClass = "AppBundle\Repository\IndividuRepository")
*/
class Individu

Другие вопросы по теме