49 lines
1.2 KiB
PHP
49 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Database\Eloquent;
|
|
|
|
use Illuminate\Database\Events\ModelsPruned;
|
|
use LogicException;
|
|
|
|
trait MassPrunable
|
|
{
|
|
/**
|
|
* Prune all prunable models in the database.
|
|
*
|
|
* @param int $chunkSize
|
|
* @return int
|
|
*/
|
|
public function pruneAll(int $chunkSize = 1000)
|
|
{
|
|
$query = tap($this->prunable(), function ($query) use ($chunkSize) {
|
|
$query->when(! $query->getQuery()->limit, function ($query) use ($chunkSize) {
|
|
$query->limit($chunkSize);
|
|
});
|
|
});
|
|
|
|
$total = 0;
|
|
|
|
do {
|
|
$total += $count = in_array(SoftDeletes::class, class_uses_recursive(get_class($this)))
|
|
? $query->forceDelete()
|
|
: $query->delete();
|
|
|
|
if ($count > 0) {
|
|
event(new ModelsPruned(static::class, $total));
|
|
}
|
|
} while ($count > 0);
|
|
|
|
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.');
|
|
}
|
|
}
|