首页 » SEO优化 » phplaravel软删除技巧_3分钟短文Laravel说要用软删除可不要真删

phplaravel软删除技巧_3分钟短文Laravel说要用软删除可不要真删

访客 2024-12-18 0

扫一扫用手机浏览

文章目录 [+]

本文我们仍旧不厌其烦地讲解软删除的功能。

物理删除

实在便是真实地把数据从数据库条款打消,laravel模型供应了开箱即用的方法。
比如下面这样利用:

phplaravel软删除技巧_3分钟短文Laravel说要用软删除可不要真删

$event = Event::find(12);$event->delete();

首先利用primary key查询出须要的条款,返回一个Event工具实例,然后调用 delete 方法进行删除。
真实的SQL如下:

phplaravel软删除技巧_3分钟短文Laravel说要用软删除可不要真删
(图片来自网络侵删)

DELETE FROM events WHERE id = 12;

laravel供应了许多语法糖,上面利用 find 和 delete 两个步骤,可以缩减为一个方法 destroy,用法如下:

Event::destroy(12);

这样一行就搞定了。

软删除

在许多情形下,你不会真正想要从数据库中删除记录,而是用一种不再在运用程序中显示它们的办法对其进行注释。
这便是所谓的软删除。

Laravel本身支持软删除,只须要进行少量的配置变动,以确保在实行delete或destroy时,模型的记录不会被实际删除。
作为一个例子,我们修正Event模型以支持软删除。

首先创建一个新的迁移,将名为deleted_at的列添加到events表中:

php artisan make:migration add_soft_delete_to_events --table=events

实行成功,输出内容如下:

Created Migration: 2020_10_08_184402_add_soft_delete_to_events

接着在天生的迁移文件内实现迁移利用的 up 方法:

public function up(){ Schema::table('events', function(Blueprint $table) { $table->softDeletes(); });}

还有用于迁移回滚的 down 方法:

public function down(){ Schema::table('events', function(Blueprint $table) { $table->dropColumn('deleted_at'); });}

修正完毕,在命令行实行迁移指令:

php artisan migrate

实行成功输出内容:

Migrating: 2020_10_08_184402_add_soft_delete_to_eventsMigrated: 2020_10_08_184402_add_soft_delete_to_events

模型SoftDelete

有了数据库表的支持,我们才能在模型内利用软删除的功能。

实在事理很大略,便是为模型追加一个全局浸染域,为每个查询子句追加上如下筛选条件:

WHERE deleted_at IS NULL

laravel已经为我们写好这部分逻辑了,在模型内引入如下trait:

namespace App;use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\SoftDeletes;

在类内引入trait,并手动指定修正器,也便是说deleted_at字段,我们利用 Carbon 进行实例化操作。

class Event extends Model { use SoftDeletes; protected $dates = ['created_at','deleted_at','started_at','updated_at'];}

保存这些变动之后,下次删除与此模型关联的记录时,deleted_at列将被设置为当前韶光。
任何设置deleted_at为日期韶光值的记录,都不会包含在任何查询结果中,因此看起来已经被删除了。

这样操作非常有用,由于误删除的数据,随时可以通过设置 deleted_at = null 而规复到正常的业务流程中,比如删除的用户,删除的订单,等等其他资源。

如果你在代码内要坚持查询全量数据,也包含软删除了的数据,那么代码这样写:

$events = Event::withTrashed()->get();

写在末了

本文我们有重温了laravel的模型软删除功能,通过创建迁移文件,修正数据库表,追加软删除字段。
并在模型内引入 SoftDelete 代码片段引入软删除的程序功能。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

标签:

相关文章