gpt4 book ai didi

php - 一个子类没有额外属性时的 Doctrine 表类继承

转载 作者:IT王子 更新时间:2023-10-29 00:18:41 27 4
gpt4 key购买 nike

我的映射有问题。我无法让它工作。我有一个像这样的抽象基类:

/**
* @Entity
* @Table(name="actions")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"FOO" = "FooAction", "BAR" = "BarAction", ...})
*/
abstract class AbstractAction
{
...
}

我有一堆不同的 Action ,都有不同的领域。例如:

/**
* @Entity
* @Table(name="actions_foo")
*/
class FooAction extends AbstractAction
{
...
}

但我的操作之一 (BarAction) 除了 AbstractAction 提供的字段外不需要任何额外的字段。但是我该如何映射呢?我尝试省略 @Table,或使用与 AbstractAction 相同的 @Table,但没有效果。

/**
* @Entity
* @Table(name="actions")
*/
class BarAction extends AbstractAction
{
...
}

省略 @Table 会给我一个关于缺少表 BarActionPDOException。使用基类的 @Table 给我:

PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

那么,我该如何映射呢?

编辑:到目前为止,我已经尝试了另外两件事。

我尝试从 BarAction 中删除 @Entity@Table,希望这样就不再需要数据库表。那是行不通的。相反,我收到此错误:

Doctrine\ORM\Mapping\MappingException: Class BarAction is not a valid entity or mapped super class.

接下来,我尝试在我的数据库中创建一个只有一个外键列 idactions_bar 表。然后我将 BarAction 映射到它。这行得通(耶!)但是拥有一个我根本不需要的额外 SQL 表感觉又笨又丑。

所以,还在寻找更好的方法...

最佳答案

您正在使用joined 继承模型(类表继承),它为父项和每个子项使用一个单独的表。如果您不在子类中指定任何字段,Doctrine 将只创建一个仅包含 ID 字段的表。

而且一个父类只能使用一种继承方式,要么是类表继承,要么是单表继承。

在这种情况下,如果您不想让表中只有 id 列,则需要更改数据模型。

关于php - 一个子类没有额外属性时的 Doctrine 表类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7037882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com