views:

27

answers:

0

referencing doctrine reference - association mapping - many to many bidirectional

/** @Entity */
class User
{
  // ...

  /**
   * @ManyToMany(targetEntity="Group", inversedBy="users")
   * @JoinTable(name="users_groups",
   *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
   *      inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
   *      )
   */
  private $groups;

  // ...
}

/** @Entity */
class Group
{
    // ...
    /**
     * @ManyToMany(targetEntity="User", mappedBy="groups")
     */
    private $users;
    // ...
}

i can see from this code that users is the owning side as it has the inversedBy attribute but if i am developing this, how do i determine who is the owning/inverse side? it seems like either will work?

then one step further, self referncing makes it even more confusing ...

class User
{
  // ...

  /**
   * @ManyToMany(targetEntity="User", mappedBy="myFriends")
   */
  private $friendsWithMe;

  /**
   * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe")
   * @JoinTable(name="friends",
   *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
   *      inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")}
   *      )
   */
  private $myFriends;

  // ...
}

how do i make sense out of it ...