Я реализую отображение наследования с помощью D2, используя стратегию наследования таблиц классов.У меня есть родительский класс с именем Person со следующим блоком кода
namespace Zain\Entity;
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="Specialty", type="string") // what other types exist?
* @DiscriminatorMap({"person" = "\Zain\Person", "employee" = "\Staff\Entities\Employee"})
*
* @Table(name="db_One.tblPerson")
*
*/
class Person
{
...
И у меня есть дочерний класс с именем Employee со следующим кодом:
namespace Staff\Entities;
/**
* Description of Employee
* @Entity
* @Table(name="db_Two.tblEmployee")
*
*/
class Employee extends \Zain\Entity\Person
{
...
Таблица MySQL: tblPerson имеетДискриминатор Столбец с именем Specialty определен как:
`Specialty` varchar(45) NOT NULL
Проблема возникает, когда у меня есть экземпляр Employee и я пытаюсь его сохранить.
Когда экземпляр Employee сохраняется, я ожидаю, что объектимя, сотрудник (строка) будет сохранен в столбце Специальность таблицы Person.Однако этого не произошло.Я сталкиваюсь с сообщением об ошибке:
Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'specialty' cannot be null
Я понимаю, что эта ошибка означает, что для столбца Specialty в выражении SQL, созданном и используемом EntityManager, не передается значение.И я установил ограничение Not Null для столбца tblPerson> Specialty.
Если я удалил ограничение not null, я могу заставить это работать - но это противоречит цели.Чтобы помочь с этим, не могли бы вы показать мне, как получить сгенерированный оператор SQL, который используется / будет использоваться менеджером сущностей во время постоянного вызова?
Было бы здорово иметь хороший конец для парыдней поиска ответов.Еще раз спасибо.