使用模型可以自定义软删除字段吗

1.在模型中使用 HasFactory 软删除功能 laravel8.5 中默认为 deleted_at 时间戳格式
2.我想在模型中自定义 删除字段 如 我的删除字段 is_del 1 未删除 2 已删除
3.我想实现这种 需要怎么修改模型或者需要怎么定义

最终想实现的效果例如tp6.0中

目前我在laravel8.5中写的方式

我想省略其中的where(‘is_del’,1)

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

直接在你的模型里像这样定义一下字段名称就可以了:

CONST DELETED_AT = "is_del"

文档里没有提到,不过看看源码比文档更直接

/**
 * Get the name of the "deleted at" column.
 *
 * @return string
 */
 public function getDeletedAtColumn()
 {
     return defined('static::DELETED_AT') ? static::DELETED_AT : 'deleted_at';
 }
2年前 评论

原本 deleted_at 是个时间字段,你这个 is_del 是个整形字段
你可以看下 vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php
这个 trait 里的方法是不是满足你的使用,不行的话就重写一些方法 ,然后用你自己的 trait

2年前 评论

用laravel还是用推荐做法,除非真是特殊需求,给后人留下好印象,反人类设计有时候会兼顾更多逻辑

2年前 评论

在baseModel里重写构造方法可以实现

public function __construct(array $attributes = [])
{ parent::__construct($attributes);

    // 生成sql时自动拼接is_del查询参数
    static::addGlobalScope('is_del', function (EloquentBuilder $builder) use ($domain) {
        $builder->where($this->getTable() . '.is_del', '=', 1);
    });
}
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!