Inheritance 使用字段的新值扩展条令2模型

Inheritance 使用字段的新值扩展条令2模型,inheritance,doctrine-orm,symfony,Inheritance,Doctrine Orm,Symfony,我正在用条令2做一个symfony3项目,我的数据库里有这种情况 基本项 Id | val1 | val2 | val3 ----------------------- 1 | a | b | c 项目 base列是base\u项的外键 我想创建一个模型,其中item的类扩展base_item,如果在两个表中声明了相同的字段,则其行为如下: 如果项目值为空,则使用基本项目值(在本例中item.val2为“b”),否则使用项目值(在本例中item.val1为“z”) 这可能吗?我

我正在用条令2做一个symfony3项目,我的数据库里有这种情况

基本项

Id | val1 | val2 | val3
-----------------------
1  |  a   |  b   |  c
项目

base
列是
base\u项的外键

我想创建一个模型,其中item的类扩展base_item,如果在两个表中声明了相同的字段,则其行为如下:

如果项目值为空,则使用基本项目值(在本例中
item.val2
为“b”),否则使用项目值(在本例中
item.val1
为“z”)

这可能吗?我没有在网上找到任何东西

我知道我可以构建模型的getter,以便在不使用继承的情况下执行类似的操作:

getCurrentVal1() {
    return $this->val1 === null ? $this->base->getVal1() : $this->val1;
}

但我想知道是否存在一个更优雅的解决方案

我向doctrine的存储库询问了这个问题,并得到确认,该功能不受支持


您是否考虑过保存流程?条令如何知道在哪里保存新的价值,例如
val1
?这将是模棱两可的。您希望这样做的方式可能会导致许多您现在看不到的问题。如果我正在处理BaseItem实例,它将保存在base_item中,如果我正在处理item的istances,它将保存在item表中。对我来说不是这样的问题是的,这是一个问题。如果您的
项目
具有
val1=null
并且
getVal1()
getter将返回
base\u项目
的值,那么它将在下次
持久化
项目
时保存在
项目中,尽管您没有更改此字段。Doctrine只会调用这个getter来检查它的值,并与原始值(即
null
)进行比较。如果Doctrine知道这是一个特例并相应地处理它,那么很明显,如果存在这样的继承,就必须处理它(例如,它可能将实际值存储在某个地方),我想问的是,这种处理方式已经以某种方式在理论上得到了实施。我不认为这些是不可能克服的问题,它们很容易处理。这不是特例,这是您的业务逻辑。呃。。只需在代码中执行即可。但不是你在问题中表现出来的方式,因为你会遇到我上面描述的问题。默认值为
base\u项的
值的Getter应该具有不同的名称,而不是
getVar1
,因为它包含您不希望持久化的逻辑。
getCurrentVal1() {
    return $this->val1 === null ? $this->base->getVal1() : $this->val1;
}