是否有可能表现出未来" laravel中的软删除?

时间:2015-02-24 10:26:42

标签: laravel eloquent soft-delete

我发现laravel Eloquent ORM中的软删除只是将deleted_at列中的null替换为时间戳。使用软删除查询表时,是仅检查deleted_at是否为空,还是将值与当前时间进行比较?

我想通过在deleted_at列上设置未来时间来查看我是否能够执行计划删除。

1 个答案:

答案 0 :(得分:4)

Laravel仅检查deleted_at是否不是NULLSoftDeletingScope

public function apply(Builder $builder)
{
    $model = $builder->getModel();

    $builder->whereNull($model->getQualifiedDeletedAtColumn());

    $this->extend($builder);
}

您可以通过创建自己的SoftDeletingScopeSoftDeletingTrait(在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()方法),您必须覆盖更多原始范围类。至少也是isSoftDeleteConstraint,但我会把它留给你。

最后,您只需要切换模型中使用的特性:

use MySoftDeletingTrait;