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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – Doctrine2 – 使用外键列作为普通字段脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在学说中有这样的东西:

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(它的值已经在DB中为给定的$relEntId设置),但是这次Doctrine在flush时发出错误信号,因为它有一个未经存在的实体.

基本上,我想要做的是创建一个关系而不知道任何关联,但相关实体的Id.如果还有其他方法可以做到,请分享.

提前致谢

编辑:

找到了一个解决方法.由于RelatedEntities将是一组有限的不可变对象,我已经完成了以下工作:

>使用entityManager查找所有RelatedEntities;
>将列表注入将创建新实体的对象
>创建新实体时,从列表中选择一个RelatedEntities作为其RelatedEntity

我会把问题保持开放一两天,以万一有人提出更好的建议.

解决方法

使用实体代理:

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

脚本宝典总结

以上是脚本宝典为你收集整理的php – Doctrine2 – 使用外键列作为普通字段全部内容,希望文章能够帮你解决php – Doctrine2 – 使用外键列作为普通字段所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。