Skip to content

Commit 497a907

Browse files
committed
add forceDeleted event
1 parent c9e6100 commit 497a907

File tree

3 files changed

+47
-7
lines changed

3 files changed

+47
-7
lines changed

src/Illuminate/Database/Eloquent/Concerns/HasEvents.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ public function getObservableEvents()
5555
{
5656
return array_merge(
5757
[
58-
'retrieved', 'creating', 'created', 'updating',
59-
'updated', 'deleting', 'deleted', 'saving',
60-
'saved', 'restoring', 'restored',
58+
'retrieved', 'creating', 'created', 'updating', 'updated',
59+
'saving', 'saved', 'restoring', 'restored',
60+
'deleting', 'deleted', 'forceDeleted',
6161
],
6262
$this->observables
6363
);

src/Illuminate/Database/Eloquent/SoftDeletes.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ public function forceDelete()
3030
{
3131
$this->forceDeleting = true;
3232

33-
$deleted = $this->delete();
33+
return tap($this->delete(), function ($deleted) {
34+
$this->forceDeleting = false;
3435

35-
$this->forceDeleting = false;
36-
37-
return $deleted;
36+
if ($deleted) {
37+
$this->fireModelEvent('forceDeleted', false);
38+
}
39+
});
3840
}
3941

4042
/**

tests/Integration/Database/EloquentDeleteTest.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Orchestra\Testbench\TestCase;
66
use Illuminate\Support\Facades\Schema;
77
use Illuminate\Database\Eloquent\Model;
8+
use Illuminate\Database\Eloquent\SoftDeletes;
89

910
/**
1011
* @group integration
@@ -40,6 +41,12 @@ public function setUp()
4041
$table->integer('post_id');
4142
$table->timestamps();
4243
});
44+
45+
Schema::create('roles', function ($table) {
46+
$table->increments('id');
47+
$table->timestamps();
48+
$table->softDeletes();
49+
});
4350
}
4451

4552
public function testOnlyDeleteWhatGiven()
@@ -56,6 +63,20 @@ public function testOnlyDeleteWhatGiven()
5663
Post::join('comments', 'comments.post_id', '=', 'posts.id')->where('posts.id', '>', 1)->orderBy('posts.id')->limit(1)->delete();
5764
$this->assertEquals(8, Post::all()->count());
5865
}
66+
67+
public function testForceDeletedEventIsFired()
68+
{
69+
$role = Role::create([]);
70+
$this->assertInstanceOf(Role::class, $role);
71+
Role::observe(new RoleObserver);
72+
73+
$role->delete();
74+
$this->assertNull(RoleObserver::$model);
75+
76+
$role->forceDelete();
77+
78+
$this->assertEquals($role->id, RoleObserver::$model->id);
79+
}
5980
}
6081

6182
class Post extends Model
@@ -68,3 +89,20 @@ class Comment extends Model
6889
public $table = 'comments';
6990
protected $fillable = ['post_id'];
7091
}
92+
93+
class Role extends Model
94+
{
95+
use SoftDeletes;
96+
public $table = 'roles';
97+
protected $guarded = [];
98+
}
99+
100+
class RoleObserver
101+
{
102+
public static $model;
103+
104+
public function forceDeleted($model)
105+
{
106+
static::$model = $model;
107+
}
108+
}

0 commit comments

Comments
 (0)