У меня проблема с моим сопоставлением. Я не могу заставить его работать. У меня есть базовый базовый класс:
/**
* @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. Это работает (yay!), Но он чувствует себя крутым и уродливым, чтобы иметь дополнительную таблицу SQL, которая мне вообще не нужна.
Итак, все еще ищете лучший способ...