【发布时间】:2012-05-28 06:51:43
【问题描述】:
有没有办法在教义中有这样的东西:
class Entity {
/**
* @Column(name="related_entity_id")
*/
private $relatedEntityId;
/**
* @ManyToOne(targetEntity="RelatedEntitiy")
* @JoinColumn(name="related_entity_id", referencedColumnName="id")
*/
private $relatedEntity;
}
我想做的事情是这样的:
调用Entity::setRelatedEntityId($someId),并持久化实体, 并让实体通过调用 Entity::getRelatedEntity() 返回相关实体。
相关实体是从一个严格限制的表中选择的,它在运行时永远不会动态增长,因此相关实体ID的数量是有限的。
在创建新实体时,我想设置相关实体 ID,但不必从数据库中获取整个相关实体。
据我测试,它不起作用,因为如果我设置了relatedEntityId而不是relatedEntity,Doctrine会自动将related_entity_id列设置为null,因为基本上没有建立任何关系。
我也尝试过这样做:
删除relatedEntityId 属性,并使用
Entity::setRelatedEntity(new RelatedEntity($relEntId))
RelatedEntity 的构造函数将设置 id,但不会设置其他值。 我不想持久化相关实体(它的值已经在数据库中为给定的 $relEntId 设置),但是这次 Doctrine 在刷新时发出错误信号,因为它有一个未持久化的实体。
基本上,我想做的是在不知道相关实体的 ID 的情况下创建关系。如果有其他方法可以做到这一点,请分享。
提前致谢
编辑:
我找到了解决方法。由于 RelatedEntities 将是一组有限的不可变对象,因此我做了以下操作:
- 使用 entityManager 查找所有相关实体;
- 将列表注入将创建新实体的对象
- 创建新实体时,从列表中选择一个相关实体作为其相关实体
我会把这个问题留一两天,以防有人提出更好的建议。
【问题讨论】:
标签: php orm doctrine-orm foreign-key-relationship