diff --git a/README.md b/README.md index 5a93550b..56447b0f 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ php artisan vendor:publish --provider "Prettus\Repository\Providers\RepositorySe - updateOrCreate(array $attributes, array $values = []) - delete($id) - deleteWhere(array $where) +- forceDelete($id) +- restore($id) - orderBy($column, $direction = 'asc'); - with(array $relations); - has(string $relation); @@ -441,6 +443,18 @@ $this->repository->deleteWhere([ ]) ``` +Force delete entry in Repository + +```php +$this->repository->forceDelete($id) +``` + +Restore entry in Repository + +```php +$this->repository->restore($id) +``` + ### Create a Criteria #### Using the command diff --git a/src/Prettus/Repository/Contracts/RepositoryInterface.php b/src/Prettus/Repository/Contracts/RepositoryInterface.php index 967d9f67..3da860c3 100644 --- a/src/Prettus/Repository/Contracts/RepositoryInterface.php +++ b/src/Prettus/Repository/Contracts/RepositoryInterface.php @@ -183,6 +183,15 @@ public function updateOrCreate(array $attributes, array $values = []); */ public function delete($id); + /** + * Force a hard delete on a soft deleted model to a entity in repository by id + * + * @param $id + * + * @return int + */ + public function forceDelete($id); + /** * Order collection by a given column * diff --git a/src/Prettus/Repository/Eloquent/BaseRepository.php b/src/Prettus/Repository/Eloquent/BaseRepository.php index 8cc548f6..f62324c9 100644 --- a/src/Prettus/Repository/Eloquent/BaseRepository.php +++ b/src/Prettus/Repository/Eloquent/BaseRepository.php @@ -17,6 +17,10 @@ use Prettus\Repository\Events\RepositoryEntityCreating; use Prettus\Repository\Events\RepositoryEntityDeleted; use Prettus\Repository\Events\RepositoryEntityDeleting; +use Prettus\Repository\Events\RepositoryEntityForceDeleted; +use Prettus\Repository\Events\RepositoryEntityForceDeleting; +use Prettus\Repository\Events\RepositoryEntityRestored; +use Prettus\Repository\Events\RepositoryEntityRestoring; use Prettus\Repository\Events\RepositoryEntityUpdated; use Prettus\Repository\Events\RepositoryEntityUpdating; use Prettus\Repository\Exceptions\RepositoryException; @@ -753,6 +757,63 @@ public function delete($id) return $deleted; } + /** + * Force a hard delete on a soft deleted model to a entity in repository by id + * + * @param $id + * + * @return int + */ + public function forceDelete($id) + { + $this->applyScope(); + + $temporarySkipPresenter = $this->skipPresenter; + $this->skipPresenter(true); + + $model = $this->find($id); + $originalModel = clone $model; + + $this->skipPresenter($temporarySkipPresenter); + $this->resetModel(); + + event(new RepositoryEntityForceDeleting($this, $model)); + + $deleted = $model->forceDelete(); + + event(new RepositoryEntityForceDeleted($this, $originalModel)); + + return $deleted; + } + + /** + * Restore a deleted entity in a soft deleted model in the repository by id + * + * @param $id + * + * @return int + */ + public function restore($id) + { + $this->applyScope(); + + $temporarySkipPresenter = $this->skipPresenter; + $this->skipPresenter(true); + + $model = $this->model->withTrashed()->findOrFail($id); + + $this->skipPresenter($temporarySkipPresenter); + $this->resetModel(); + + event(new RepositoryEntityRestoring($this, $model)); + + $restored = $model->restore(); + + event(new RepositoryEntityRestored($this, $model)); + + return $restored; + } + /** * Delete multiple entities by given criteria. * diff --git a/src/Prettus/Repository/Events/RepositoryEntityForceDeleted.php b/src/Prettus/Repository/Events/RepositoryEntityForceDeleted.php new file mode 100644 index 00000000..fac767e8 --- /dev/null +++ b/src/Prettus/Repository/Events/RepositoryEntityForceDeleted.php @@ -0,0 +1,16 @@ + + */ +class RepositoryEntityForceDeleted extends RepositoryEventBase +{ + /** + * @var string + */ + protected $action = "forceDeleted"; +} diff --git a/src/Prettus/Repository/Events/RepositoryEntityForceDeleting.php b/src/Prettus/Repository/Events/RepositoryEntityForceDeleting.php new file mode 100644 index 00000000..09a45646 --- /dev/null +++ b/src/Prettus/Repository/Events/RepositoryEntityForceDeleting.php @@ -0,0 +1,16 @@ + + */ +class RepositoryEntityForceDeleting extends RepositoryEventBase +{ + /** + * @var string + */ + protected $action = "forceDeleting"; +} diff --git a/src/Prettus/Repository/Events/RepositoryEntityRestored.php b/src/Prettus/Repository/Events/RepositoryEntityRestored.php new file mode 100644 index 00000000..e12ff7ed --- /dev/null +++ b/src/Prettus/Repository/Events/RepositoryEntityRestored.php @@ -0,0 +1,16 @@ + + */ +class RepositoryEntityRestored extends RepositoryEventBase +{ + /** + * @var string + */ + protected $action = "restored"; +} diff --git a/src/Prettus/Repository/Events/RepositoryEntityRestoring.php b/src/Prettus/Repository/Events/RepositoryEntityRestoring.php new file mode 100644 index 00000000..5e11b9fa --- /dev/null +++ b/src/Prettus/Repository/Events/RepositoryEntityRestoring.php @@ -0,0 +1,16 @@ + + */ +class RepositoryEntityRestoring extends RepositoryEventBase +{ + /** + * @var string + */ + protected $action = "restoring"; +} diff --git a/src/Prettus/Repository/Providers/EventServiceProvider.php b/src/Prettus/Repository/Providers/EventServiceProvider.php index 7b76d062..9384d64a 100644 --- a/src/Prettus/Repository/Providers/EventServiceProvider.php +++ b/src/Prettus/Repository/Providers/EventServiceProvider.php @@ -1,4 +1,5 @@ [ - 'Prettus\Repository\Listeners\CleanCacheRepository' + 'Prettus\Repository\Listeners\CleanCacheRepository', ], 'Prettus\Repository\Events\RepositoryEntityUpdated' => [ - 'Prettus\Repository\Listeners\CleanCacheRepository' + 'Prettus\Repository\Listeners\CleanCacheRepository', ], 'Prettus\Repository\Events\RepositoryEntityDeleted' => [ - 'Prettus\Repository\Listeners\CleanCacheRepository' - ] + 'Prettus\Repository\Listeners\CleanCacheRepository', + ], + 'Prettus\Repository\Events\RepositoryEntityForceDeleted' => [ + 'Prettus\Repository\Listeners\CleanCacheRepository', + ], + 'Prettus\Repository\Events\RepositoryEntityRestored' => [ + 'Prettus\Repository\Listeners\CleanCacheRepository', + ], ]; /**