From 6484744326531829341e1ff886cc9b628b20d73e Mon Sep 17 00:00:00 2001 From: Jonas Staudenmeir Date: Sun, 30 Dec 2018 16:33:05 +0100 Subject: [PATCH] Fix qualified UPDATED_AT timestamps --- src/Illuminate/Database/Eloquent/Builder.php | 10 ++++++++-- tests/Database/DatabaseEloquentBuilderTest.php | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/Illuminate/Database/Eloquent/Builder.php b/src/Illuminate/Database/Eloquent/Builder.php index e93daa0ffded..47dc8a56e611 100755 --- a/src/Illuminate/Database/Eloquent/Builder.php +++ b/src/Illuminate/Database/Eloquent/Builder.php @@ -857,12 +857,18 @@ protected function addUpdatedAtColumn(array $values) return $values; } - $column = $this->qualifyColumn($this->model->getUpdatedAtColumn()); + $column = $this->model->getUpdatedAtColumn(); - return array_merge( + $values = array_merge( [$column => $this->model->freshTimestampString()], $values ); + + $values[$this->qualifyColumn($column)] = $values[$column]; + + unset($values[$column]); + + return $values; } /** diff --git a/tests/Database/DatabaseEloquentBuilderTest.php b/tests/Database/DatabaseEloquentBuilderTest.php index 9e9d722321b5..46a61e01904d 100755 --- a/tests/Database/DatabaseEloquentBuilderTest.php +++ b/tests/Database/DatabaseEloquentBuilderTest.php @@ -1081,7 +1081,7 @@ public function testUpdate() $this->mockConnectionForModel($model, ''); $builder->setModel($model); $builder->getConnection()->shouldReceive('update')->once() - ->with('update "table" set "table"."updated_at" = ?, "foo" = ?', [$now, 'bar'])->andReturn(1); + ->with('update "table" set "foo" = ?, "table"."updated_at" = ?', ['bar', $now])->andReturn(1); $result = $builder->update(['foo' => 'bar']); $this->assertEquals(1, $result); @@ -1089,6 +1089,22 @@ public function testUpdate() Carbon::setTestNow(null); } + public function testUpdateWithTimestampValue() + { + $query = new BaseBuilder(m::mock(ConnectionInterface::class), new Grammar, m::mock(Processor::class)); + $builder = new Builder($query); + $model = new EloquentBuilderTestStub; + $this->mockConnectionForModel($model, ''); + $builder->setModel($model); + $builder->getConnection()->shouldReceive('update')->once() + ->with('update "table" set "foo" = ?, "table"."updated_at" = ?', ['bar', null])->andReturn(1); + + $result = $builder->update(['foo' => 'bar', 'updated_at' => null]); + $this->assertEquals(1, $result); + + Carbon::setTestNow(null); + } + protected function mockConnectionForModel($model, $database) { $grammarClass = 'Illuminate\Database\Query\Grammars\\'.$database.'Grammar';