php - Doctrine2 - 使用外键列作为普通字段

标签 php orm doctrine-orm foreign-key-relationship

有没有办法在教义上有这样的东西:

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,但不会设置其他值。 我不想保留 RelatedEntity(它的值已经在数据库中为给定的 $relEntId 设置),但是这次 Doctrine 在刷新时发出错误信号,因为它有一个未保留的实体。

基本上,我想做的是在除了相关实体的 Id 之外什么都不知道的情况下创建关系。如果有其他方法可以做到这一点,请分享。

提前致谢

编辑:

我找到了解决方法。由于 RelatedEntities 将是一组有限的不可变对象(immutable对象),我已完成以下操作:

  1. 使用 entityManager 查找所有 RelatedEntities;
  2. 将列表注入(inject)将创建新实体的对象
  3. 创建新实体时,从列表中选择一个相关实体作为其相关实体

我会将问题悬而未决一两天,以防万一有人想出更好的办法。

最佳答案

使用实体代理:

Entity::setRelatedEntity($entityManager->getReference('RelatedEntity', $relEntId))

关于php - Doctrine2 - 使用外键列作为普通字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780495/

相关文章:

php - 找不到实体存储库方法

php - 用新外键替换列值的方法?

php - 为什么 echo 行为不同?

php - 登录后如何使用sql中的session获取两张表的数据,但是我登录时使用了1张表的数据

java - 加入列的 Hibernate 合并问题

mysql - 学说 - 数据库表示

php - 如何使用 ajax 和 PHP 计算和显示实时数据库查询?

database - 我如何在 Redis 中组织汽车的制造商、型号和生成

java - Hibernate 集合中的独特项目

php - Symfony2 + 学说 : Tool for generating relations between entities