php larval 胖模型,php-Laravel 5.5自定义模型软删除

我的帖子通过状态列中的值定义为是否软删除,其中:0 =不可用,1 =可用,77 =软删除.

当前,我在模型中添加了一个全局范围,以确保不返回软删除的帖子:

protected static function boot()

{

parent::boot();

static::addGlobalScope('status', function (Builder $builder) {

$builder->where('status', '!=', '77');

});

}

如何使用默认的时间戳和delete_at列修改模型的softDelete(内置的Laravel功能)以使用基于数字/状态的系统,使其在使用-> delete(),- > withTrashed()和-> restore()?

解决方法:

您可以查看Laravel的模型事件部分.在模型中,扩展您创建的baseModel类.在此baseModel中,您可以添加在删除模型时触发的事件.像这样:

protected static function boot(){

static::deleting(function($thisModel){

$thisModel->attributes['status'] = 77;

$thisModel->save();

return false;

});

}

当返回false时,将停止用于删除模型的默认操作.因此,这会将状态设置为77,而不是将其删除.或者,您可以只在要使用这种删除方式的任何模型中使用它,而不使用基本模型.我发现对于具有一些可以实现基于状态的软删除的某些事情的大型项目来说,基本模型更容易些.

要在此模型上添加其他类似软删除的功能,请考虑使用局部范围,而不是列出的全局范围.例如:

public function scopeOnlyTrashed(Builder $query){

return $query->where('status', 77);

}

现在,当您执行数据库调用时

Posts::onlyTrashed()->get();

您将获得与laravel的onlyTrashed()方法相同的功能.

标签:lumen,laravel,eloquent,models,php

来源: https://codeday.me/bug/20191110/2013751.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值