diff --git a/Maphper/Relation/ManyMany.php b/Maphper/Relation/ManyMany.php index bddd9d7..e59ec79 100644 --- a/Maphper/Relation/ManyMany.php +++ b/Maphper/Relation/ManyMany.php @@ -111,4 +111,8 @@ private function offsetSetAutotraverse($value, $relatedField, $valueField) { public function offsetUnset($id) { //$this->relation->mapper->filter([$relatedField => $this->object->$valueField, $this->relation->parentField => $id])->delete(); } + + public function delete() { + $this->getResults()->delete(); + } } diff --git a/tests/MySqlDatabaseTest.php b/tests/MySqlDatabaseTest.php index 297809e..d3f8126 100644 --- a/tests/MySqlDatabaseTest.php +++ b/tests/MySqlDatabaseTest.php @@ -1123,6 +1123,25 @@ public function testManyManyGetByIndexNotExist() { $this->assertFalse(isset($actors[1]->movies[2])); } + public function testDeleteManyMany() { + list($actors, $movies, $cast) = $this->setUpMoviesActors(); + + // Set up some relations + $actors[1]->movies[] = $movies[2]; + $actors[1]->movies[] = $movies[3]; + $actors[2]->movies[] = $movies[2]; + $actors[2]->movies[] = $movies[1]; + + $this->assertNotEquals(0, count($cast)); + $this->assertEquals(4, count($cast)); + + $actors[1]->movies->delete(); + + $this->assertEquals(2, count($cast)); + $this->assertEquals(0, count($actors[1]->movies)); + $this->assertEquals(2, count($actors[2]->movies)); + } + private function setupMoviesActorsReal() { $cast = new \Maphper\Maphper($this->getDataSource('cast', ['movieId', 'actorId'], ['editmode' => true]));