我的映射有问题。我无法让它工作。我有一个像这样的抽象基类:
/**
* @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
as the 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
那么,我该如何映射呢?
Edit:到目前为止,我还尝试了两件事。
我尝试删除@Entity
以及@Table
from BarAction
希望这样就不再需要数据库表。那是行不通的。相反,我收到此错误:
Doctrine\ORM\Mapping\MappingException: Class BarAction is not a valid entity or mapped super class.
接下来我尝试创建一个actions_bar
我的数据库中只有一个外键列的表id
。然后我映射了BarAction
到它。这确实有效(耶!),但是拥有一个我根本不需要的额外 SQL 表感觉又粗又丑。
所以,还在寻找更好的方法...