gpt4 book ai didi

Symfony2 : how can I load a user taking into account its mapping entity?

转载 作者:行者123 更新时间:2023-12-02 17:16:58 26 4
gpt4 key购买 nike

虽然我使用 Symfony 2.1 和 FOSUserBundle 并且一切都运行良好,但我不知道如何解决问题。

基本上,我想知道是否有一种方法可以在考虑与另一个实体的关系的情况下从数据库中查找(加载或获取)用户。

情况是这样的:

我已经让用户也可以通过社交网络(Google、Facebook、LinkedIn 等)登录我的网站。我还要求他们提供离线访问权限,这样我就可以随时访问他们的社交帐户。

由于每个用户可以拥有任意数量的连接(或者可能没有连接,因为它们是可选的),我决定不将此信息保存在用户表中。我创建了一个名为“SocialConnection”的抽象实体,它由真实实体(Google、Facebook 等)扩展。在这个实体中,我存储用户通过这些网络登录我的网站时获得的用户信息(user_id、social_id、access_token 等),因此在我的 User 类中,我映射了抽象“SocialEngine”的集合,它允许我将所有网络整合在一起。

为了将来能够添加其他网络,如 Twitter、Yahoo 等,我认为应该如此。

所以,现在的问题是,当用户通过任何这些社交网络登录我的网站时,我需要从数据库中加载他,知道他的社交 ID,但我不知道该怎么做。

我已经看到 UserManager 的方法 $this->findUserBy 查找有关属性的用户,但我认为情况并非如此。

我应该怎么做才能找到一个好的解决方案?

提前致谢。

最诚挚的问候,伊兹。

最佳答案

为了实现这一点,您需要更深入地了解 Dotility 的 api。基本存储库方法(find、findBy 等)还不够。

您需要使用doctrine's DQL 。它看起来像 SQL,但您基于映射元数据而不是直接基于数据库架构进行查询。

如果您的用户具有 SocialEngineOneToMany $socialAccounts 属性。您将能够执行以下操作:

SELECT u
FROM Bundle:User AS u
JOIN u.socialAccounts AS sa
WHERE sa.id = 34

但是您只能查询 SocialEngine 的属性,而不能查询子类......(即:您无法查询 SocialFacebookEngine 的 facebookId)。

您要么必须将所有 twitter/facebook/etc 数据放入 SocialEngine 基类中,然后放在 User 类中。或者您可以为每个“社交引擎”创建一个实体,并在每个引擎和用户之间创建 OneToOne 关系。

关于Symfony2 : how can I load a user taking into account its mapping entity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12868554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com