diff --git a/src/Illuminate/Database/Eloquent/Builder.php b/src/Illuminate/Database/Eloquent/Builder.php index e827f4cc31c4..b4825a489a7d 100755 --- a/src/Illuminate/Database/Eloquent/Builder.php +++ b/src/Illuminate/Database/Eloquent/Builder.php @@ -870,7 +870,11 @@ protected function addUpdatedAtColumn(array $values) $values ); - $values[$this->qualifyColumn($column)] = $values[$column]; + $segments = preg_split('/\s+as\s+/i', $this->query->from); + + $qualifiedColumn = end($segments).'.'.$column; + + $values[$qualifiedColumn] = $values[$column]; unset($values[$column]); diff --git a/tests/Database/DatabaseEloquentBuilderTest.php b/tests/Database/DatabaseEloquentBuilderTest.php index 2fdbba24b170..34f3337a334b 100755 --- a/tests/Database/DatabaseEloquentBuilderTest.php +++ b/tests/Database/DatabaseEloquentBuilderTest.php @@ -1165,6 +1165,24 @@ public function testUpdateWithoutTimestamp() $this->assertEquals(1, $result); } + public function testUpdateWithAlias() + { + 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', $now])->andReturn(1); + + $result = $builder->from('table as alias')->update(['foo' => 'bar']); + $this->assertEquals(1, $result); + + Carbon::setTestNow(null); + } + protected function mockConnectionForModel($model, $database) { $grammarClass = 'Illuminate\Database\Query\Grammars\\'.$database.'Grammar';