From f7ec93a157aaef9241c9a170c0f3a1c0fd255e3a Mon Sep 17 00:00:00 2001 From: Kuba Szymanowski Date: Sun, 18 Jun 2017 14:16:24 +0200 Subject: [PATCH 1/3] Fix #19282 --- src/Illuminate/Database/Eloquent/Builder.php | 6 +++- .../DatabaseEloquentIntegrationTest.php | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Builder.php b/src/Illuminate/Database/Eloquent/Builder.php index 67641a8e11cc..29df26f5db5c 100755 --- a/src/Illuminate/Database/Eloquent/Builder.php +++ b/src/Illuminate/Database/Eloquent/Builder.php @@ -887,7 +887,11 @@ public function applyScopes() $builder = clone $this; - foreach ($this->scopes as $scope) { + foreach ($this->scopes as $identifier => $scope) { + if (!isset($builder->scopes[$identifier])) { + continue; + } + $builder->callScope(function (Builder $builder) use ($scope) { // If the scope is a Closure we will just go ahead and call the scope with the // builder instance. The "callScope" method will properly group the clauses diff --git a/tests/Database/DatabaseEloquentIntegrationTest.php b/tests/Database/DatabaseEloquentIntegrationTest.php index c72960e4ba27..8ce97ff44dd2 100644 --- a/tests/Database/DatabaseEloquentIntegrationTest.php +++ b/tests/Database/DatabaseEloquentIntegrationTest.php @@ -3,6 +3,8 @@ namespace Illuminate\Tests\Database; use Exception; +use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Database\Eloquent\SoftDeletingScope; use PHPUnit\Framework\TestCase; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Eloquent\Relations\Pivot; @@ -90,6 +92,14 @@ protected function createSchema() $table->string('name'); $table->timestamps(); }); + + $this->schema($connection)->create('soft_deleted_users', function ($table) { + $table->increments('id'); + $table->string('name')->nullable(); + $table->string('email'); + $table->timestamps(); + $table->softDeletes(); + }); } $this->schema($connection)->create('non_incrementing_users', function ($table) { @@ -1012,6 +1022,14 @@ public function testModelIgnoredByGlobalScopeCanBeRefreshed() $this->assertNotNull($user->fresh()); } + public function testGlobalScopeCanBeRemovedByOtherGlobalScope() + { + $user = EloquentTestUserWithGlobalScopeRemovingOtherScope::create(['id' => 1, 'email' => 'taylorotwell@gmail.com']); + $user->delete(); + + $this->assertNotNull(EloquentTestUserWithGlobalScopeRemovingOtherScope::find($user->id)); + } + public function testForPageAfterIdCorrectlyPaginates() { EloquentTestUser::create(['id' => 1, 'email' => 'taylorotwell@gmail.com']); @@ -1224,6 +1242,24 @@ public static function boot() } } +class EloquentTestUserWithGlobalScopeRemovingOtherScope extends Eloquent +{ + use SoftDeletes; + + protected $table = 'soft_deleted_users'; + + protected $guarded = []; + + public static function boot() + { + static::addGlobalScope(function ($builder) { + $builder->withoutGlobalScope(SoftDeletingScope::class); + }); + + parent::boot(); + } +} + class EloquentTestPost extends Eloquent { protected $table = 'posts'; From f4efe9468f1b6a05cae984512461ee9b57e16f86 Mon Sep 17 00:00:00 2001 From: Kuba Szymanowski Date: Sun, 18 Jun 2017 14:18:48 +0200 Subject: [PATCH 2/3] Fix import order --- tests/Database/DatabaseEloquentIntegrationTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Database/DatabaseEloquentIntegrationTest.php b/tests/Database/DatabaseEloquentIntegrationTest.php index 8ce97ff44dd2..e632acd32192 100644 --- a/tests/Database/DatabaseEloquentIntegrationTest.php +++ b/tests/Database/DatabaseEloquentIntegrationTest.php @@ -3,11 +3,11 @@ namespace Illuminate\Tests\Database; use Exception; -use Illuminate\Database\Eloquent\SoftDeletes; -use Illuminate\Database\Eloquent\SoftDeletingScope; use PHPUnit\Framework\TestCase; +use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\Eloquent\Relations\Pivot; +use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Pagination\AbstractPaginator as Paginator; From 95f36c6628dfbd7637b26cb0e66cbadb4cbc8048 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Sun, 18 Jun 2017 09:51:14 -0500 Subject: [PATCH 3/3] Update Builder.php --- src/Illuminate/Database/Eloquent/Builder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Builder.php b/src/Illuminate/Database/Eloquent/Builder.php index 29df26f5db5c..dca6507d613b 100755 --- a/src/Illuminate/Database/Eloquent/Builder.php +++ b/src/Illuminate/Database/Eloquent/Builder.php @@ -888,7 +888,7 @@ public function applyScopes() $builder = clone $this; foreach ($this->scopes as $identifier => $scope) { - if (!isset($builder->scopes[$identifier])) { + if (! isset($builder->scopes[$identifier])) { continue; }