diff --git a/manual/new/docs/en/working-with-objects.txt b/manual/new/docs/en/working-with-objects.txt index 00e8e8221..601d40582 100644 --- a/manual/new/docs/en/working-with-objects.txt +++ b/manual/new/docs/en/working-with-objects.txt @@ -2,7 +2,7 @@ ++ Many-to-Many relations +++ Creating a new link Lets say we have two classes User and Group which are linked trhough a GroupUser association class. When working with transient (new) records the fastest way for adding a User and couple of Groups for it is: - + $user = new User(); $user->name = 'Some User'; $user->Group[0]->name = 'Some Group'; @@ -11,7 +11,7 @@ $user->save(); However in real world scenarious you often already have existing groups, where you want to add a given user. The most efficient way of doing this is: - + $gu = new GroupUser(); $gu->user_id = $userId; $gu->group_id = $groupId; @@ -22,16 +22,18 @@ $gu->save(); While the obvious and convinient way of deleting a link between User and Group would be the following, you still should *NOT* do this: - + $user = $conn->getTable('User')->find(5); $user->GroupUser ->remove(0) ->remove(1); +This is due to a fact that $user->GroupUser loads all group links for given user. This can time-consuming task if user belongs to many groups. Even if the user belongs to few groups this will still execute an unnecessary SELECT statement. + The right way to delete links between many-to-many associated records is by using the DQL DELETE statement. Convenient and recommended way of using DQL DELETE is trhough the Query API. - + $deleted = Doctrine_Query::create() ->delete() ->from('GroupUser')