From 02b78e289c7acfbd304d6c8935ca6bd7a530032e Mon Sep 17 00:00:00 2001 From: Propaganistas Date: Thu, 20 May 2021 11:11:14 +0200 Subject: [PATCH] Fix clone behavior of QueryBuilder (#621) * Update QueryBuilder.php * Update QueryBuilderTest.php * Update QueryBuilder.php --- src/QueryBuilder.php | 10 ++++++++++ tests/QueryBuilderTest.php | 29 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 64eb91ea..96d78cd5 100755 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -130,6 +130,16 @@ public function __call($name, $arguments) return $result; } + + public function clone() + { + return clone $this; + } + + public function __clone() + { + $this->subject = clone $this->subject; + } public function __get($name) { diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 8c4e206b..333d1d81 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -297,4 +297,33 @@ public function it_does_not_lose_pivot_values_with_belongs_to_many_relation() $foundTestModel->pivot->location ); } + + + /** @test */ + public function it_clones_the_subject_upon_cloning() + { + $queryBuilder = QueryBuilder::for(TestModel::class); + + $queryBuilder1 = (clone $queryBuilder)->where('id', 1); + $queryBuilder2 = (clone $queryBuilder)->where('name', 'John Doe'); + + $this->assertNotSame( + $queryBuilder1->toSql(), + $queryBuilder2->toSql() + ); + } + + /** @test */ + public function it_supports_clone_as_method() + { + $queryBuilder = QueryBuilder::for(TestModel::class); + + $queryBuilder1 = $queryBuilder->clone()->where('id', 1); + $queryBuilder2 = $queryBuilder->clone()->where('name', 'John Doe'); + + $this->assertNotSame( + $queryBuilder1->toSql(), + $queryBuilder2->toSql() + ); + } }