同一实体上的多对多 symfony

many to many on the same entity symfony

我正在与 FOSUserBunde 合作,我想在 User 实体上建立 ManytoMany 关系。

我看过这个post,我也试过做同样的事情。

所以这是我的代码

class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", inversedBy="userfriends")
     */
    private $users;

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="users")
     */
    private $userfriends;

当我 运行 更新数据库命令时,我得到 table with user_user with usertarget and usersource

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

我认为您遗漏了一些代码。 首先,由于您创建了多对多,这将导致一个新的 table。那是你的(usertarget,usersource)。然后,您了解某处必须有某种阵列或某种方式来检索信息。 在 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'

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

* @ORM\JoinTable(name="user_user",
*   joinColumns={
*     @ORM\JoinColumn(name="usersource", 
*                     referencedColumnName="userfriends")
*   },
*   inverseJoinColumns={
*     @ORM\JoinColumn(name="usertarget", referencedColumnName="id")
*   }
* )

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

  • Access to many-to-many relation in array format, symfony2
  • https://gist.github.com/Ocramius/3121916 注意他们如何使用函数 (getter/setter) 和 ArrayCollections.
  • 请注意,有一个用于显示结果的树枝。在您的情况下,它可能看起来像:

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