From a59bd3d35dbe671cb46f8c9460fc4d484210449e Mon Sep 17 00:00:00 2001 From: Dries Vints Date: Thu, 22 Sep 2022 12:15:48 +0200 Subject: [PATCH] Fix incrementing string keys --- .../Database/Eloquent/Concerns/HasUlids.php | 14 ++++++++++++++ .../Database/Eloquent/Concerns/HasUuids.php | 14 ++++++++++++++ src/Illuminate/Database/Eloquent/Model.php | 4 ---- tests/Database/DatabaseEloquentModelTest.php | 3 +-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Illuminate/Database/Eloquent/Concerns/HasUlids.php b/src/Illuminate/Database/Eloquent/Concerns/HasUlids.php index 0c3417485a2c..bc80745b367b 100644 --- a/src/Illuminate/Database/Eloquent/Concerns/HasUlids.php +++ b/src/Illuminate/Database/Eloquent/Concerns/HasUlids.php @@ -55,4 +55,18 @@ public function getKeyType() return $this->keyType; } + + /** + * Get the value indicating whether the IDs are incrementing. + * + * @return bool + */ + public function getIncrementing() + { + if (in_array($this->getKeyName(), $this->uniqueIds())) { + return false; + } + + return $this->incrementing; + } } diff --git a/src/Illuminate/Database/Eloquent/Concerns/HasUuids.php b/src/Illuminate/Database/Eloquent/Concerns/HasUuids.php index 7049dee4ae3d..0f28bd08212f 100644 --- a/src/Illuminate/Database/Eloquent/Concerns/HasUuids.php +++ b/src/Illuminate/Database/Eloquent/Concerns/HasUuids.php @@ -55,4 +55,18 @@ public function getKeyType() return $this->keyType; } + + /** + * Get the value indicating whether the IDs are incrementing. + * + * @return bool + */ + public function getIncrementing() + { + if (in_array($this->getKeyName(), $this->uniqueIds())) { + return false; + } + + return $this->incrementing; + } } diff --git a/src/Illuminate/Database/Eloquent/Model.php b/src/Illuminate/Database/Eloquent/Model.php index 3cfa33fe1a91..14d6137c4421 100644 --- a/src/Illuminate/Database/Eloquent/Model.php +++ b/src/Illuminate/Database/Eloquent/Model.php @@ -1851,10 +1851,6 @@ public function setKeyType($type) */ public function getIncrementing() { - if ($this->getKeyType() === 'string') { - return false; - } - return $this->incrementing; } diff --git a/tests/Database/DatabaseEloquentModelTest.php b/tests/Database/DatabaseEloquentModelTest.php index a62492ee0be4..d9b71e663a96 100755 --- a/tests/Database/DatabaseEloquentModelTest.php +++ b/tests/Database/DatabaseEloquentModelTest.php @@ -2216,10 +2216,9 @@ public function testIntKeyTypePreserved() public function testStringKeyTypePreserved() { $model = $this->getMockBuilder(EloquentKeyTypeModelStub::class)->onlyMethods(['newModelQuery', 'updateTimestamps', 'refresh'])->getMock(); - $model->id = 'string id'; $query = m::mock(Builder::class); - $query->shouldReceive('insert')->once()->with(['id' => 'string id']); + $query->shouldReceive('insertGetId')->once()->with([], 'id')->andReturn('string id'); $query->shouldReceive('getConnection')->once(); $model->expects($this->once())->method('newModelQuery')->willReturn($query);