From abf79e18d8942f0ff0c5d4ad1126822c4ad9a9d3 Mon Sep 17 00:00:00 2001 From: Alban Jubert Date: Tue, 29 Nov 2016 15:47:50 +0100 Subject: [PATCH] Fix for empty value assignment on HasMany relations --- src/SaveRelationsBehavior.php | 6 +++++- tests/SaveRelationsBehaviorTest.php | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/SaveRelationsBehavior.php b/src/SaveRelationsBehavior.php index d1ea552..95ea4f0 100644 --- a/src/SaveRelationsBehavior.php +++ b/src/SaveRelationsBehavior.php @@ -85,7 +85,11 @@ class SaveRelationsBehavior extends Behavior if ($relation->multiple === true) { $newRelations = []; if (!is_array($value)) { - $value = [$value]; + if (!empty($value)) { + $value = [$value]; + } else { + $value = []; + } } foreach ($value as $entry) { if ($entry instanceof $relation->modelClass) { diff --git a/tests/SaveRelationsBehaviorTest.php b/tests/SaveRelationsBehaviorTest.php index 4f606e4..0093743 100644 --- a/tests/SaveRelationsBehaviorTest.php +++ b/tests/SaveRelationsBehaviorTest.php @@ -436,6 +436,14 @@ class SaveRelationsBehaviorTest extends \PHPUnit_Framework_TestCase $this->assertEquals(1, count($project->users), 'Project should have 1 users after assignment'); } + public function testAssignSingleEmptyObjectToHasManyRelationShouldSucceed() + { + $project = new Project(); + $user = User::findOne(1); + $project->users = null; + $this->assertEquals(0, count($project->users), 'Project should have 0 users after assignment'); + } + public function testChangeHasOneRelationWithAnotherObject() { $dummy_a = new DummyModel(); @@ -447,7 +455,6 @@ class SaveRelationsBehaviorTest extends \PHPUnit_Framework_TestCase $this->assertTrue($dummy_a->save(), 'Dummy A could not be saved'); $this->assertTrue($dummy_b->save(), 'Dummy B could not be saved'); $dummy_c = new DummyModel(); - //$this->assertTrue($dummy_c->save(), 'Dummy C could not be saved'); $dummy_a->children = $dummy_c; $this->assertTrue($dummy_a->save(), 'Dummy A could not be saved'); }