毫不审查为什么我想要这个(听起来像是一种不好的方法,但我有充分的理由)我想知道标准框架编辑中是否有办法3.1 与可能不存在的实体建立关系...
首先,我确实意识到这决定了模式,这很好。因此,如果一个实体不存在,它不会创建外键,并且该字段始终是零的,或者目标实体确实存在,则创建外键,并且该字段就像正常的关联一样工作...
其次,这只会将项目更改为项目,并且可能会更改行以作为更新,我意识到需要进行手动模式更新。
最好是没有第三方捆绑依赖项...希望能够执行此操作的标准框架,
有人吗?预先感谢
编辑
我正在用教义ORM的实体中的注释
此外
为什么我这样做的最简单版本是因为某些捆绑包是可选的项目对项目,并且捆绑a仅在捆绑b中才能使用bundle b中的实体。我已经考虑过使用服务,如果容器 ->具有容器 -> get或in-valid =" null"方法的XML,但这无法解决属性持久性。我很高兴将非映射值存储为一个自定义关系字段,这很好,更长,想知道是否有一种教义可以忽略缺失的目标的方法...
hm,也许我误解了您的问题,但这听起来像是正常的"无效"关联?
通过注释创建您的关联:
/**
*
* @var Child
* @ORMManyToOne(targetEntity="Child")
*/
private $child;
并使用
setChild(Child $child = null)
{
$this->child = $child;
}
作为允许无效值的设置器。
,您的Getter可能看起来像:
getChild()
{
return $this->child;
}
如果没有任何child
,它将返回null。
我将保留其他答案,因为它回答了'无效关联目标' live data
的问题。
这是"无效关联目标" meta data
的答案,这是另一回事。
op要求在他的情况下不存在的元数据中提供targetEntity
,例如不是在其他捆绑包中(或任何OP的神秘原因可能是)。
在那种情况下,我建议以学说的targinalentityListener为基础,该targintityListener能够在运行时解决目标,并且targetEntity
可以设置为摘要类或接口:
/**
* @ORMManyToOne(targetEntity="AcmeInvoiceBundleModelInvoiceSubjectInterface")
* @var InvoiceSubjectInterface
*/
protected $subject;
InvoiceSubjectInterface
然后在运行时将替换为config e.g。:
# app/config/config.yml
doctrine:
# ...
orm:
# ...
resolve_target_entities:
AcmeInvoiceBundleModelInvoiceSubjectInterface: AppBundleEntityCustomer
因此,这应该是提供no class
或实施自己的解决方案的可扩展行为。