Symfony2/Doctrine2:在对象之间具有通用链接
我对Symfony2/Doctrine2有建模问题。我目前正在尝试将整个网站从一个以前的PHP框架传递到Symfony2,在以前的框架中有一个我喜欢的概念,但我无法用Symfony和Doctrine建模 我的问题是:使用前一个框架,可以将类a的对象链接到任何其他类(B、C、D…)的任何其他对象。为此,类A有一个属性模型id,用于知道对象链接到哪个类(它对应于在每个类的配置文件中定义的唯一id),以及一个属性记录id,它是链接对象的外部id。例如,通过这种方式,可以有一个类注释和一个关于任何对象(博客文章、用户等)的注释 由于这些通用链接似乎不可能用条令关系(ManyToOne等)建模,我考虑使用一种全局方法,或者每个类都有一个方法,例如getItem,它查看属性model_id和record_id,然后返回正确的对象 但我还是有问题:Symfony2/Doctrine2:在对象之间具有通用链接,symfony,doctrine-orm,Symfony,Doctrine Orm,我对Symfony2/Doctrine2有建模问题。我目前正在尝试将整个网站从一个以前的PHP框架传递到Symfony2,在以前的框架中有一个我喜欢的概念,但我无法用Symfony和Doctrine建模 我的问题是:使用前一个框架,可以将类a的对象链接到任何其他类(B、C、D…)的任何其他对象。为此,类A有一个属性模型id,用于知道对象链接到哪个类(它对应于在每个类的配置文件中定义的唯一id),以及一个属性记录id,它是链接对象的外部id。例如,通过这种方式,可以有一个类注释和一个关于任何对象(
- 我不能直接在实体中定义这个方法,因为我不应该访问实体类中的数据库
- 如果我在一个全局服务中定义它一次,或者在一个存储库中为每个类定义n次——这是可能的,因为这次我可以访问数据库——我将能够在除实体代码之外的任何地方调用该方法。它使实现变得非常丑陋,因为这意味着在我前面的示例中,需要访问注释的实体的所有方法都必须从实体移动到存储库。最后,我将把几乎所有的对象方法都放在存储库中,而不是直接放在实体中
事先非常感谢您的帮助。我实现类似于此的东西的方式相当简单,但并不直接: 如果要创建一个新类,我建议使用如下名称: 评论法学 在这种情况下,您可以创建指向其他对象的链接: 类别识别码
类别识别码
类c_id 这使您可以将其与其他多个关联。您一次只能使用一个远程ID,但它允许您跨对象使用它,还可以利用orm 如果您不想太担心初始对象->注释线程设置,那么我建议您: 外国身份证
外语课
有意义吗?问题是您的解决方案意味着我们提前知道对象A将链接到对象B、C等。但是,我想要实现的是一个解决方案,在这个解决方案中,我们事先不知道什么是链接,我们可以在对象a和新创建的类Z的对象之间创建一个新链接,而不改变类a和Z中的任何内容。这样,如果我举我前面的例子,您可以正确地对任何对象进行注释,而无需在类注释和其他类之间建立直接关系 我想我找到了解决这个问题的方法: 我所做的是实现一个监听器,带有事件postLoad,每次从Doctrine加载实体时都会触发该事件。另一方面,我的实体有一个属性$item,它是我们还不知道其类的链接项。 在postLoad事件中,我们通过model_id和record_id查看数据库,记录链接项的类,并返回对象本身,然后在doctor返回实体之前填充$item属性。这样,每次我们从条令中获得一个实体时,实体和物品之间的“假”链接都是由自动事件建立的,这适用于每个实体。 使用相同的原理,我们可以使用每次更新实体时触发的postUpdate事件来更新链接。它将手动更新数据库中的“假”链接 有关更多信息,我建议阅读以下页面: