diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index 737288456b14..59eb358e0556 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -2678,6 +2678,10 @@ public function updateOrInsert(array $attributes, array $values = []) return $this->insert(array_merge($attributes, $values)); } + if (empty($values)) { + return true; + } + return (bool) $this->take(1)->update($values); } diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index 87b76cb82170..ec8946d5bd43 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -2003,6 +2003,21 @@ public function testUpdateOrInsertMethod() $this->assertTrue($builder->updateOrInsert(['email' => 'foo'], ['name' => 'bar'])); } + public function testUpdateOrInsertMethodWorksWithEmptyUpdateValues() + { + $builder = m::spy(Builder::class.'[where,exists,update]', [ + m::mock(ConnectionInterface::class), + new Grammar, + m::mock(Processor::class), + ]); + + $builder->shouldReceive('where')->once()->with(['email' => 'foo'])->andReturn(m::self()); + $builder->shouldReceive('exists')->once()->andReturn(true); + + $this->assertTrue($builder->updateOrInsert(['email' => 'foo'])); + $builder->shouldNotHaveReceived('update'); + } + public function testDeleteMethod() { $builder = $this->getBuilder();