Doctrine2架构设计 - 具有补充数据的实体



首先,我想提前道歉问题标题,因为理想情况下可能无法解释我要处理的情况。我已经做了一些研究,但没有找到合适的解决方案的运气。

我的案件:

我有一个实体,例如一项活动,该活动代表了我网站上客户执行的活动的活动。它可能是一种不同的类型,例如:page_view,注释,登录,购买等。我要做的是将补充数据分配给每个活动,例如。对于评论活动,补充数据将是评论实体,用于购买一系列产品实体。 目前,我只是将活动类型定义为ActivityInterface中的常数,然后使用该值来获取能够从HTTP请求中提供的参数中解析正确的实体/实体的EntityManager实例。该解决方案有很多缺点,我不确定这是事件是否正确的方法。

你们可以通过给我一些提示或将我重定向到一些有用的出版物,以帮助我吗?谢谢。

我建议使用类似的映射超类:

/** @MappedSuperclass */
class Activity
{
    /** @Id @Column(type="integer") */
    protected $id;
    /** @Column(type="string") */
    protected $generalActivityProperty;
    // ... more fields and methods
}
/** @Entity */
class Comment extends Activity
{
    /** @ManyToOne(targetEntity='CommentEntity') */
    private $commentEntity;
    // ... more fields and methods
}
/** @Entity */
class Purchase extends Activity
{
    /** @OneToMany(targetEntity='ProductAssociations') */
    private $products;
    // ... more fields and methods
}

这将创建每个类别的单个表(但不是为"活动"),每个表都包含"活动"中定义的所有字段/方法以及特定类中定义的其他字段/方法。

您甚至可以通过entityManager->getRepository('Acticity')->find()查询所有活动,例如并获取评论列表,pageview等。返回对象。

它没有经过测试,但是您应该知道如何做。

您还可以使用Single Table InheritanceClass Table Inheritance。在这里检查一下。

但我想在您的情况下,映射的超类应该是完美的。

相关内容

  • 没有找到相关文章

最新更新