2015-02-24 3 views
0

Я обнаружил, что soft-delete в laravel Eloquent ORM просто заменяет нуль в столбце deleted_at меткой времени. Когда вы запрашиваете таблицу с мягким удалением, просто проверяете, является ли delete_at нулевым или действительно сравнивает значение с текущим временем?Можно ли выполнить «будущее» мягкое удаление в laravel?

Я прошу проверить, удастся ли мне удалить расписание, установив время в столбце deleted_at.

+0

Отметка поместить внутри колонны deleted_at это просто метка времени, когда он был мягким удален. Таким образом, общий запрос на модели с включенным мягким удалением просто проверяет, является ли столбец нулевым. –

ответ

2

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; 
+0

Спасибо. Это было больше, чем я ожидал. Все, что я хочу знать, это просто, если это возможно, и я бы предпочел добавить столбец в моей таблице/добавить таблицу расписания в моей базе данных, а не вступить в исходный класс мягкого удаления. – cytsunny

+0

Добро пожаловать. Расширение и переопределение - это не совсем «возиться с оригинальным классом», но если вы не чувствуете себя комфортно с ним ... уверен, создайте свой собственный столбец и область действия :) – lukasgeiter