首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3分钟短文:Laravel 检查记录是否被软删除

引言

laravel模型中引入了SoftDeletes这个全局作用域用于将数据库的条目 标记为删除,而实际上并不清除数据,这样可以为后续的数据恢复做铺垫。本文就来说一说,如何检验一个数据条目是否被软删除了。

学习时间

使用软删除功能,比较简单,只需要在模型中使用如下代码类:

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model

{

use SoftDeletes;

}

如果数据库表中正好是使用 deleted_at 标记删除日期时间,那么无需手动指定该字段为软删除字段了。如果是其他字段,需要手动指定。我们看框架源代码关于软删除部分,这里做了精简:

protected function runSoftDelete()

{

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

}

这里是指定软删除列为当前日期时间。接着看 getDeletedAtColumn 方法。这里没有精简,是原始内容:

public function getDeletedAtColumn()

{

return defined('static::DELETED_AT') ? static::DELETED_AT : 'deleted_at';

}

大家可以看到,如果定义了 DELETED_AT 常量,那么就用这个值,如果没有定义,就使用默认的 deleted_at。

那么好了,如果要自定义软删除字段,只用在继承类,也就是模型内编辑此常量即可:

class User extends Model

{

use SoftDeletes;

const DELETED_AT = 'my_deleted_at';

}

如果要使用框架的格式化方法对该字段进行标准操作:

protected $dates = ['my_deleted_at'];

检查条目

上一节介绍了默认的软删除使用方法,和自定义软删除字段的方法。使用了软删除功能后,会在模型的查询方法上,默认追加

where deleted_at is null

那么如果使用了全量查询后,如何判断一个记录是否是已经软删除的呢?laravel提供了这些功能。

$users = User::withTrashed()->where('active', 1)->get();

然后使用遍历判断是否已软删除:

foreach($user as $user)

{

if ($user->trashed()) {

continue;

}

}

或者使用另一个函数判断:

method_exists($user, 'trashed')

如果有 trashed 方法,则是删除的模型记录。

写在最后

本文通过对laravel模型中软删除的源码分析, 为大家展示了引入软删除功能,并自定义软删除标记字段的方法。通过模型提供的方法,进而判断记录是否已软删除。

Happy coding :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200903A0O5MI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券