Laravel5.1 模型 --软删除

软删除是比较实用的一种删除手段,比如说 你有一本账 有一笔记录你觉得不对给删了 过了几天发现不应该删除,这时候软删除的目的就实现了 你可以找到已经被删除的数据进行操作 可以是还原也可以是真正的删除。


1 普通删除

在软删除之前咱先看看普通的删除方法:

1.1 直接通过主键删除

    public function getDelete()
    {
        Article::destroy(1);
        Article::destroy([1,2,3]);
    }

1.2 获取model后删除

    public function getDelete()
    {
        $article = Article::find(3);
        $article->delete();
    }

1.3 批量删除

    public function getDelete()
    {
        // 返回一个整形 删除了几条数据
        $deleteRows = Article::where(‘id‘,‘>‘,3)->delete();
        dd($deleteRows);    // 2
    }

2 软删除

2.1 准备工作

如果你要实现软删除 你应该提前做3件事情:

  1. 添加deleted_at 到模型的 $date 属性中。
  2. 在模型中使用 Illuminate\Database\Eloquent\SoftDeletes 这个trait
  3. 保证你的数据表中有deleted_at列 如果没有就添加这个列。

首先我们做第一步和第二步:

<?php

namespace App;

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

class Article extends Model
{
    // 使用SoftDeletes这个trait
    use SoftDeletes;
    // 白名单
    protected $fillable = [‘title‘, ‘body‘];

    // dates
    protected $dates = [‘deleted_at‘];
}

然后我们生成一个迁移文件来增加deleted_at列到数据表:

class InsertDeleteAtIntroArticles extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table(‘articles‘, function (Blueprint $table) {
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table(‘articles‘, function (Blueprint $table) {
            $table->dropSoftDeletes();
        });
    }
}

2.2 实现软删除

现在我们就可以删除一条数据试试啦:

    public function getDelete()
    {
        $article = Article::first();
        $article->delete();
    }

↑ 当我们删了这条数据后 在数据表中的表示是 deleted_at 不为空 它是一个时间值,当delete_at不为空时 证明这条数据已经被软删除了。

2.3 判断数据是否被软删除

        if ($article->trashed()){
            echo ‘这个模型已经被软删除了‘;
        }

2.4 查询到被软删除的数据

有一点需要注意,当数据被软删除后 它会自动从查询数据中排除、就是它无法被一般的查询语句查询到。当我们想要查询软删除数据时 可以使用withTrashed方法

    public function getIndex()
    {
        $article = Article::withTrashed()->first();
        if ($article->trashed()){
            echo ‘被软删除了‘;   // 代码会执行到这一行
        }
    }

我们还可以使用onlyTrashed,它和withTrashed的区别是 它只获得软删除的数据。

    public function getIndex()
    {
        $articles = Article::onlyTrashed()->where(‘id‘,‘<‘,‘10‘)->get()->toArray();
        dd($articles);
    }

2.5 恢复被软删除的数据

    public function getIndex()
    {
        $article = Article::withTrashed()->find(6);
        $article->restore();
    }

2.6 永久删除数据

    public function getIndex()
    {
        $article = Article::withTrashed()->find(6);
        $article->forceDelete();
    }
时间: 2024-10-14 20:52:09

Laravel5.1 模型 --软删除的相关文章

Laravel5.1 模型--删除

今天我们来看看如何删除数据 delete删除模型 获取到模型,执行delete方法就好: public function destroy($id) { $article = Article::findOrFail($id); if ($article->delete()){ echo '删除成功'; }else{ echo '删除失败'; } } delete方法会返回一个bool值. destory删除模型 相比较delete而言更加简洁,只要你知道id字段就可以使用: $delete = \

ThinkPHP_5的模型时间戳和软删除

[模型时间戳] 应用配置文件[不过一般不这样用] // 自动写入时间戳字段 'auto_timestamp' => true, [控制器块]namespace app\index\controller; use think\Controller;use app\index\model\App; class Index extends Controller{ public function index() { $res = App::create([ 'name'=>'kail', 'is_en

软删除

软删除 版本 调整功能 5.0.2 deleteTime 属性改为非静态定义 在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复. 要使用软删除功能,需要引入SoftDelete trait,例如User模型按照下面的定义就可以使用软删除功能: namespace app\index\model; use think\Model; use traits\model\SoftDelete; class Use

laravel and lumen 软删除操作

知识都是有联系的,这绝对是真理.作为一名小白,看了一点官方文档,把我自己理解的软删除操作给大家讲讲.有些就是套用官方文档的话. 定义:什么是软删除呢,所谓软删除指的是数据表记录并未真的从数据库删除,而是将表记录的标识状态标记为软删除,这样在查询的时候就可以加以过滤,让对应表记录看上去是被"删除"了. 通俗易懂说法:数据库的表中,使用了一个日期字段作为标识状态,这个日期字段可以自定义,这里我们使用deleted_at,如果对应模型被软删除,则该条记录的deleted_at字段的值为删除时

laravel如何使用软删除

由于项目着急所以只是简单的使用了删除功能以后如果需要软删除别的功能在添加补充 1.laravel使用软删除的第一部就是要在你需要操作的数据表中加上字段       deleted_at 类型是 timestamp ps:注意使用的时候默认为null 还有就是不要点击根据当前时间戳更新 这里使用的是mysql图形话工具Navicat 2.在对应数据表模型 class类中添加 use SoftDeletes; 在namespace下添加   use Illuminate\Database\Eloqu

通用权限底层实现的记录软删除

IDbHelper dbHelper = new OracleHelper(ConfigHelper.GetConfigString("BusinessDbConnection")); bool result = true; try { //设置父子表的删除标志 dbHelper.BeginTransaction(); AREAManager manager = new AREAManager(dbHelper, userInfo); KeyValuePair<string, o

Yii2 软删除

什么是软删除 后台操作,删除一条记录,不希望真正的从数据库中删除,用个字段标记一下.比如delete_at.默认0.当执行删除操作,更新delete_at为当前时间戳 这样列表显示的时候只查询delete_at为0的记录. 牵涉到Yii2的中的操作 引入SoftDeleteBehavior文件 <?php namespace common\behavior; use yii\base\Behavior; use yii\base\Event; use yii\db\ActiveRecord; c

Mysql软删除

所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删除状态:当需要将数据删除时,则将此字段更新为1. 与之对应的,将数据从数据库中彻底删除的方式称为硬删除,即Hard Deleting 当然,文中提到了另一种方法,及为数据添加状态字段(如:Statuses)等,来描述当前数据的状态,以便更好地跟踪数据.

Laravel 查询包括软删除的记录

查询结果包括已被软删除的记录: Model::withTrashed()->get(); 只查询软删除记录: Model::onlyTrashed()->get(); PS:个人博客-Laravel 查询包括软删除的记录 原文地址:https://www.cnblogs.com/feiffy/p/10301112.html