是否可以在 laravel 中执行 "future" 软删除?
Is it possible to perform "future" soft delete in laravel?
我发现 laravel Eloquent ORM 中的软删除只是用时间戳替换 deleted_at 列中的空值。软删除查询table时,只是检查deleted_at是否为null,还是真的在比较当前时间的值?
我想看看是否可以通过在 deleted_at 列上设置未来时间来执行计划删除。
Laravel 仅检查 deleted_at
是否不是 NULL
。 SoftDeletingScope
:
public function apply(Builder $builder)
{
$model = $builder->getModel();
$builder->whereNull($model->getQualifiedDeletedAtColumn());
$this->extend($builder);
}
您可以通过创建自己的 SoftDeletingScope
和 SoftDeletingTrait
(在 Laravel 5 中称为 SoftDeletes
)来更改它。
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()
方法),您必须覆盖更多原始范围class。至少也是 isSoftDeleteConstraint
,但我会把它留给你。
最后你只需要切换掉你在模型中使用的特征:
use MySoftDeletingTrait;
我发现 laravel Eloquent ORM 中的软删除只是用时间戳替换 deleted_at 列中的空值。软删除查询table时,只是检查deleted_at是否为null,还是真的在比较当前时间的值?
我想看看是否可以通过在 deleted_at 列上设置未来时间来执行计划删除。
Laravel 仅检查 deleted_at
是否不是 NULL
。 SoftDeletingScope
:
public function apply(Builder $builder)
{
$model = $builder->getModel();
$builder->whereNull($model->getQualifiedDeletedAtColumn());
$this->extend($builder);
}
您可以通过创建自己的 SoftDeletingScope
和 SoftDeletingTrait
(在 Laravel 5 中称为 SoftDeletes
)来更改它。
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()
方法),您必须覆盖更多原始范围class。至少也是 isSoftDeleteConstraint
,但我会把它留给你。
最后你只需要切换掉你在模型中使用的特征:
use MySoftDeletingTrait;