【问题标题】:Symfony2 dynamic relationship with a fieldSymfony2与字段的动态关系
【发布时间】:2013-11-13 19:56:09
【问题描述】:

我正在构建一个社交网站,并且正在展示 Feed 的工作方式。我想在这里使用答案:How to implement the activity stream in a social network 并实现提到的数据库设计:

id             
user_id       (int)
activity_type (tinyint)
source_id     (int)  
parent_id     (int)
parent_type   (tinyint)
time          (datetime but a smaller type like int would be better) 

问题是我不知道如何根据activity_type 映射source_id。如果用户注册,我希望 source_id 成为注册用户。如果有人创建了一个组,source_id 将是该组。我知道我可以只使用没有密钥的简单 ID 我只是想知道 Symfony 是否有某种内置方法来做到这一点。

如果我获取提要并且 activity_type 是 user_register,我希望能够在不运行其他查询的情况下获取源(用户):

$feedEntity->getSource()->getUsername(); //getSource() being the User entity

如果source_type是“user_post”:

$feedEntity->getSource()->getMessage(); //getSource() being the UserPost entity

我基本上只是想找到存储这些数据的最佳方式并使其最快。

【问题讨论】:

    标签: symfony dynamic types field


    【解决方案1】:

    教条处理起来不容易,我认为它不能自动达到 100%

    但是,关键字是表继承

    http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance

    我认为你可以通过这样做来实现你的目标:

    • 您通过表的类型列创建一个判别器映射,告诉学说加载这个实体一个 UserSource(例如)

    • 这个 UserSource 可以是一个自己的实体(如果需要,可以从基类继承),您可以决定将 source_id 列映射到真实的用户实体

    • 您可以使用 instanceof 匹配映射到鉴别器映射内的不同实体的命名空间,为不同的源定义不同的行为

    【讨论】:

    • 什么是判别图?
    • 您阅读链接的内容了吗? “@DiscriminatorMap 指定鉴别器列的哪些值将行标识为某种类型。在上述情况下,“person”值将行标识为 Person 类型,“employee”将行标识为类型员工。”简而言之:这个映射定义了你的类型列的哪个值将被映射到哪个实体
    • 是的,我的意思是删除那个问题:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2014-02-23
    相关资源
    最近更新 更多