雄辩地使用delete字段和Deleted_at字段

时间:2020-03-31 00:33:59

标签: php laravel eloquent

我有一个旧数据库,其中使用 delete (删除) 1/0进行软删除,而不是 deleted_at 是否可以在模型级别使用已删除的字段名称?因此我仍然可以自动依赖Deleted_at,但也不会显示那些没有 deleted_at 但具有 deleted = 1的旧记录,表明该记录已被软删除?

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    protected $table = 'users';
    //protected consider deleted=1 as deleted

    public function store(Request $request)
    {
        $user = new User;
        $user->save();
    }

}

1 个答案:

答案 0 :(得分:0)

我尝试了一下,并创建了如下的特征:

namespace App\Traits;

use Illuminate\Database\Eloquent\SoftDeletes;

trait MySoftDeletes
{
    use SoftDeletes;

    protected function runSoftDelete()
    {
        $query = $this->newQueryWithoutScopes()->where($this->getKeyName(), $this->getKey());

        $time = $this->freshTimestamp();

        $columns = [$this->getDeletedAtColumn() => 1];

        $this->{$this->getDeletedAtColumn()} = 1;

        if ($this->timestamps && ! is_null($this->getUpdatedAtColumn())) {
            $this->{$this->getUpdatedAtColumn()} = $time;

            $columns[$this->getUpdatedAtColumn()] = $this->fromDateTime($time);
        }

        $query->update($columns);
    }
}

...这似乎可以正常工作,并更新is_deleted列并将其设置为1而不是时间戳。

但是,考虑到is_deleted也可以为0(不为null),因此将其视为已删除。您是否知道是否可以更改默认位置,然后检查is_deleted null或is_deleted = 0?

或使用https://github.com/tenantcloud/laravel-boolean-softdeletes