diff --git a/src/Jenssegers/Mongodb/Relations/BelongsToMany.php b/src/Jenssegers/Mongodb/Relations/BelongsToMany.php index 58ba8e58f..48038111f 100644 --- a/src/Jenssegers/Mongodb/Relations/BelongsToMany.php +++ b/src/Jenssegers/Mongodb/Relations/BelongsToMany.php @@ -170,6 +170,9 @@ public function detach($ids = array(), $touch = true) $query = $this->newParentQuery(); + // Generate a new related query instance + $related = $this->related->newInstance(); + // If associated IDs were passed to the method we will only delete those // associations, otherwise all of the association ties will be broken. // We'll return the numbers of affected rows when we do the deletes. @@ -189,6 +192,9 @@ public function detach($ids = array(), $touch = true) { $query->pull($this->otherKey, $id); } + + // Remove the relation from the related model + $related->pull($this->foreignKey, $this->parent->getKey()); return count($ids); } diff --git a/tests/RelationsTest.php b/tests/RelationsTest.php index 6492ecf33..0b15f7bc9 100644 --- a/tests/RelationsTest.php +++ b/tests/RelationsTest.php @@ -190,8 +190,8 @@ public function testHasManyAndBelongsToAttachesExistingModels() ); $moreClients = array( - Client::create(array('name' => 'Boloni Ltd.'))->_id, - Client::create(array('name' => 'Meatballs Inc.'))->_id + Client::create(array('name' => 'synced Boloni Ltd.'))->_id, + Client::create(array('name' => 'synced Meatballs Inc.'))->_id ); // Sync multiple records @@ -209,7 +209,10 @@ public function testHasManyAndBelongsToAttachesExistingModels() $user = User::with('clients')->find($user->_id); - // Assert there are now 4 client objects in the relationship - $this->assertCount(4, $user->clients); + // Assert there are now still 2 client objects in the relationship + $this->assertCount(2, $user->clients); + // Assert that the new relationships name start with synced + $this->assertStringStartsWith('synced', $user->clients[0]->name); + $this->assertStringStartsWith('synced', $user->clients[1]->name); } }