From 34bc2b0f26f44bd228e9df1eca7801d931000f57 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Thu, 1 Aug 2019 12:45:01 -0500 Subject: [PATCH] Get base query before update so that scopes are applied Fixes #1798 --- src/Jenssegers/Mongodb/Eloquent/Builder.php | 2 +- tests/QueryTest.php | 18 ++++++++++++++++++ tests/models/Scoped.php | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 tests/models/Scoped.php diff --git a/src/Jenssegers/Mongodb/Eloquent/Builder.php b/src/Jenssegers/Mongodb/Eloquent/Builder.php index b14053229..fff1cbdb8 100644 --- a/src/Jenssegers/Mongodb/Eloquent/Builder.php +++ b/src/Jenssegers/Mongodb/Eloquent/Builder.php @@ -44,7 +44,7 @@ public function update(array $values, array $options = []) return 1; } - return $this->query->update($this->addUpdatedAtColumn($values), $options); + return $this->toBase()->update($this->addUpdatedAtColumn($values), $options); } /** diff --git a/tests/QueryTest.php b/tests/QueryTest.php index de8589ebd..0175fd2ad 100644 --- a/tests/QueryTest.php +++ b/tests/QueryTest.php @@ -21,6 +21,7 @@ public function setUp(): void public function tearDown(): void { User::truncate(); + Scoped::truncate(); parent::tearDown(); } @@ -309,4 +310,21 @@ public function testPaginate() $this->assertEquals(9, $results->total()); $this->assertEquals(1, $results->currentPage()); } + + public function testUpdate() + { + $this->assertEquals(1, User::where(['name' => 'John Doe'])->update(['name' => 'Jim Morrison'])); + $this->assertEquals(1, User::where(['name' => 'Jim Morrison'])->count()); + + Scoped::create(['favorite' => true]); + Scoped::create(['favorite' => false]); + + $this->assertCount(1, Scoped::get()); + $this->assertEquals(1, Scoped::query()->update(['name' => 'Johnny'])); + $this->assertCount(1, Scoped::withoutGlobalScopes()->where(['name' => 'Johnny'])->get()); + + $this->assertCount(2, Scoped::withoutGlobalScopes()->get()); + $this->assertEquals(2, Scoped::withoutGlobalScopes()->update(['name' => 'Jimmy'])); + $this->assertCount(2, Scoped::withoutGlobalScopes()->where(['name' => 'Jimmy'])->get()); + } } diff --git a/tests/models/Scoped.php b/tests/models/Scoped.php new file mode 100644 index 000000000..77a55bd55 --- /dev/null +++ b/tests/models/Scoped.php @@ -0,0 +1,20 @@ +where('favorite', true); + }); + } +}