许多对许多在同一实体Symfony上



我正在使用FOSUserBunde,我想在User实体上建立ManytoMany关系。

我看过这篇文章,我试图做同样的事情.

所以这是我的代码

class User extends BaseUser
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORMManyToMany(targetEntity="AppBundleEntityUser", inversedBy="userfriends")
*/
private $users;
/**
* @ORMManyToMany(targetEntity="AppBundleEntityUser", mappedBy="users")
*/
private $userfriends;

当我运行更新数据库命令时,我得到了带有usertargetusersourceuser_user

表。我的问题是我想显示所有usersfriends。 请提供任何帮助..

我认为您错过了代码中的一些内容。 首先,由于您进行了多对多,这将产生一个新表。那是你的(用户目标,用户源(。然后,您了解某处必须有一些数组或某种方法来检索信息。 在SQL中,对于用户George,向他所有的朋友显示的自我引用多对多,如下所示:

SELECT F.Id 
FROM user U 
JOIN user_user MtM ON U.Id = MtM.usersource
JOIN user F ON F.Id = MtM.usertarget
WHERE U.Name = 'George'

联接应该以某种方式复制到代码中。可能是这样的:

* @ORMJoinTable(name="user_user",
*   joinColumns={
*     @ORMJoinColumn(name="usersource", 
*                     referencedColumnName="userfriends")
*   },
*   inverseJoinColumns={
*     @ORMJoinColumn(name="usertarget", referencedColumnName="id")
*   }
* )

响应在很大程度上取决于您显示所有用户朋友的含义。 对于Symfony中的表示,您可能需要更复杂的东西,而不仅仅是一个变量。 当有数据时,他们需要一个可见的表示,一些显示结果的方法。 查看以下链接以获取一些想法:

  • 访问数组格式的多对多关系,symfony2
  • https://gist.github.com/Ocramius/3121916 注意它们如何使用函数(getter/setter(和ArrayCollections。
  • 查询多对多关系并在 Symfony with Doctrine 中显示良好的结果 请注意,有一根树枝用于显示结果。在您的情况下,它可能看起来像:

  • {{ user.id }}{{ user.name }}{% for friend in user.userfriends %} {{ friend.id }} {% endfor %}

最新更新