Laravel только проверяет, deleted_at
не NULL
. SoftDeletingScope
:
public function apply(Builder $builder)
{
$model = $builder->getModel();
$builder->whereNull($model->getQualifiedDeletedAtColumn());
$this->extend($builder);
}
Вы можете изменить это, создав свой собственный SoftDeletingScope
и SoftDeletingTrait
(это называется SoftDeletes
в Laravel 5).
trait MySoftDeletingTrait {
use Illuminate\Database\Eloquent\SoftDeletingTrait;
public static function bootSoftDeletingTrait()
{
static::addGlobalScope(new MySoftDeletingScope);
}
}
И
class MySoftDeletingScope extends Illuminate\Database\Eloquent\SoftDeletingScope {
public function apply(Builder $builder)
{
$model = $builder->getModel();
$builder->where($model->getQualifiedDeletedAtColumn(), '<=', Carbon::now());
$this->extend($builder);
}
}
Примечание что, чтобы быть в состоянии удалить сферу (remove()
метод) вы должны переопределить больше исходного класса областей видимости. По крайней мере, также isSoftDeleteConstraint
, но я оставлю это вам.
Наконец, вы только должны перейти из признака, который используется в моделях:
use MySoftDeletingTrait;
Отметка поместить внутри колонны deleted_at это просто метка времени, когда он был мягким удален. Таким образом, общий запрос на модели с включенным мягким удалением просто проверяет, является ли столбец нулевым. –