From 424bdd409b141727b9ffafd33a32ca9a17bd34e8 Mon Sep 17 00:00:00 2001 From: Rodrigo Pedra Brum Date: Mon, 21 Feb 2022 12:06:56 -0300 Subject: [PATCH] fix updated with provided qualified updated_at (#41133) --- src/Illuminate/Database/Eloquent/Builder.php | 2 +- .../Database/DatabaseEloquentBuilderTest.php | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Builder.php b/src/Illuminate/Database/Eloquent/Builder.php index c98e76cf7c0e..babd44b857e7 100755 --- a/src/Illuminate/Database/Eloquent/Builder.php +++ b/src/Illuminate/Database/Eloquent/Builder.php @@ -1004,7 +1004,7 @@ protected function addUpdatedAtColumn(array $values) $qualifiedColumn = end($segments).'.'.$column; - $values[$qualifiedColumn] = $values[$column]; + $values[$qualifiedColumn] = Arr::get($values, $qualifiedColumn, $values[$column]); unset($values[$column]); diff --git a/tests/Database/DatabaseEloquentBuilderTest.php b/tests/Database/DatabaseEloquentBuilderTest.php index 863344c4ec46..63f9b08de405 100755 --- a/tests/Database/DatabaseEloquentBuilderTest.php +++ b/tests/Database/DatabaseEloquentBuilderTest.php @@ -1683,6 +1683,20 @@ public function testUpdateWithTimestampValue() $this->assertEquals(1, $result); } + public function testUpdateWithQualifiedTimestampValue() + { + $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 "table"."foo" = ?, "table"."updated_at" = ?', ['bar', null])->andReturn(1); + + $result = $builder->update(['table.foo' => 'bar', 'table.updated_at' => null]); + $this->assertEquals(1, $result); + } + public function testUpdateWithoutTimestamp() { $query = new BaseBuilder(m::mock(ConnectionInterface::class), new Grammar, m::mock(Processor::class)); @@ -1715,6 +1729,24 @@ public function testUpdateWithAlias() Carbon::setTestNow(null); } + public function testUpdateWithAliasWithQualifiedTimestampValue() + { + Carbon::setTestNow($now = '2017-10-10 10:10:10'); + + $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" as "alias" set "foo" = ?, "alias"."updated_at" = ?', ['bar', null])->andReturn(1); + + $result = $builder->from('table as alias')->update(['foo' => 'bar', 'alias.updated_at' => null]); + $this->assertEquals(1, $result); + + Carbon::setTestNow(null); + } + public function testUpsert() { Carbon::setTestNow($now = '2017-10-10 10:10:10');