| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- <?php
- namespace Illuminate\Database\Eloquent;
- use Illuminate\Database\Events\ModelsPruned;
- use LogicException;
- trait Prunable
- {
- /**
- * Prune all prunable models in the database.
- *
- * @param int $chunkSize
- * @return int
- */
- public function pruneAll(int $chunkSize = 1000)
- {
- $total = 0;
- $this->prunable()
- ->when(in_array(SoftDeletes::class, class_uses_recursive(get_class($this))), function ($query) {
- $query->withTrashed();
- })->chunkById($chunkSize, function ($models) use (&$total) {
- $models->each->prune();
- $total += $models->count();
- event(new ModelsPruned(static::class, $total));
- });
- return $total;
- }
- /**
- * Get the prunable model query.
- *
- * @return \Illuminate\Database\Eloquent\Builder
- */
- public function prunable()
- {
- throw new LogicException('Please implement the prunable method on your model.');
- }
- /**
- * Prune the model in the database.
- *
- * @return bool|null
- */
- public function prune()
- {
- $this->pruning();
- return in_array(SoftDeletes::class, class_uses_recursive(get_class($this)))
- ? $this->forceDelete()
- : $this->delete();
- }
- /**
- * Prepare the model for pruning.
- *
- * @return void
- */
- protected function pruning()
- {
- //
- }
- }
|