繁体   English   中英

Doctrine2:具有多个外键的表的关联映射

[英]Doctrine2: association mapping for a table with multiple foreign keys

我和我的一个朋友正在研究用于存储食谱的多语言网络应用程序。 我们使用Doctrine 2.1.1来实现持久性。 目前我卡住为一个实体生成模型,并希望有人可以给我一个提示,或者为我们的案例展示最佳实践。

我将尝试广泛地解释我们的ERD。 如果有什么难以理解的话,请随意询问。 我们的应用程序包含实体recipeingredientsunits (成分的度量单位)和categories 这些实体中的每一个都存储在自己的表中。 每个实体都可以用多种语言翻译。 翻译的存储位于名为(您的名字) translations的表格中。 现在它会有点棘手......我们有一个名为mnemonic的额外表格。 我们用它来识别全球背景下的食谱,成分,类别和测量单位......我认为最好的类比是GUID。 助记符还可以帮助我们在食谱,配料等及其翻译之间进行映射。 助记符表由五行组成: id (主键)和另外四个元数据行: ingredient_idrecipe_idcategory_idunit_id引用与其亲属的主键的1:1关系。

我问自己,我如何映射助记实体和食谱,​​成分等之间的关系。 或者(更具体地说)如何使用category_id表的主键值自动填充助记符表中的category_id?

我在我的Category模型中首先尝试了这种关联映射:

class Category
{
/**
 * @var integer $id
 *
 * @Column(name="id", type="bigint", nullable=false)
 * @Id
 * @GeneratedValue(strategy="IDENTITY")
 * @OneToOne(targetEntity="Mnemonic", mappedBy="category")
 * @JoinColumn(name="id", referencedColumnName="category_id")
 */
private $id;

并在助记符模型中:

class Mnemonic
{
/**
 *
 * @OneToOne(targetEntity="Category", inversedBy="mnemonic")
 * @JoinColumn(name="category_id", referencedColumnName="id")
 */    
private $categoryId;

这没有成功 - Doctrine不会产生任何错误,但只填充类别表。 所以我想我可以在Category模型的__construct方法中编写一些代码,在那里我将创建一个Mnemonic对象,根据Category模型的ID设置他的categoryId并将其绑定到doctrine的实体管理器。 但这有点难看 - 我认为模型类不应该对持久性负责。 在写我的问题时,我想,解决方案可能是一种工厂类。 它会将所有持久性逻辑从模型中删除,并可以处理特殊情况。

你怎么看? 什么是最好的解决方案?

最好的问候建议

保罗

您是否考虑过为onFlush添加事件监听器? 所以基本上在flush上,你检查你持久存在的对象,然后执行一些代码,比如创建Mnemonic对象。

有关注册onFlush事件的信息可以在学说网站的以下链接中找到:

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/events.html#onflush

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM