У меня проблема с моим отображением. Я не могу заставить его работать. У меня есть абстрактный базовый класс, например:
/**
* @Entity
* @Table(name="actions")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"FOO" = "FooAction", "BAR" = "BarAction", ...})
*/
abstract class AbstractAction
{
...
}
У меня есть куча разных действий, все с разными полями. Например:
/**
* @Entity
* @Table(name="actions_foo")
*/
class FooAction extends AbstractAction
{
...
}
Но одно из моих действий (BarAction
) не нуждается в дополнительных полях, кроме тех, которые предоставлены AbstractAction
. Но как я могу отобразить это? Я попытался опустить @Table
или использовать тот же @Table
, что и AbstractAction
, но безрезультатно.
/**
* @Entity
* @Table(name="actions")
*/
class BarAction extends AbstractAction
{
...
}
Пропуск @Table
дает мне PDOException
о пропущенной таблице BarAction
. Использование @Table
базового класса дает мне:
PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Итак, как мне это отобразить?
Редактировать: Пока что я попробовал еще две вещи.
Я пытался удалить @Entity
, а также @Table
из BarAction
в надежде, что для этого больше не потребуется таблица базы данных. Это не работает Вместо этого я получаю эту ошибку:
Doctrine\ORM\Mapping\MappingException: Class BarAction is not a valid entity or mapped super class.
Затем я попытался создать таблицу actions_bar
в моей базе данных только с одним столбцом внешнего ключа id
. Затем я сопоставил BarAction
с ним. Это работает (ууу!), Но немного грустно и ужасно иметь дополнительную таблицу SQL, которая мне вообще не нужна.
Итак, все еще ищем лучший путь ...