首页 > 其他分享 >Laravel 软删除(转)

Laravel 软删除(转)

时间:2023-04-04 18:37:29浏览次数:31  
标签:Laravel restore use 删除 Database 模型 SoftDeletes

原文:https://www.jianshu.com/p/a56b79ed2cb2

1、首先要做一些设置

首先在模型类中要使用SoftDeletestrait,该trait为软删除提供一系列相关方法,具体可参考源码Illuminate\Database\Eloquent\SoftDeletes,此外还要设置$date属性数组,将deleted_at置于其中:

namespace App\Models; 

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

class 模型名 extends Model { 
        use SoftDeletes;
    //...其他一些设置 
    protected $dates = ['delete_at']; 
        public $timestamps = false;
}

2、用laravel向相应的数据库添加deleted_at字段

php artisan make:migration alter_表名_deleted_at --table=表名

3、此时在database/migrations文件夹下会生成一个相应文件,更改如下

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class Alter表名DeletedAt extends Migration { 
     public function up() { 
        Schema::table('表名', function (Blueprint $table) { 
        $table->softDeletes(); 
        }); 
     } 
     ...//其它方法 
 }

再次运行命令php artisan migrate ,发现数据库相应的数据表中已经有delete_at字段了

4、软删代码

我们在控制器中编写测试代码

$post = 模型::find(6);
$post->delete();
if($post->trashed()){
    echo '软删除成功!';
    dd($post);
}else{
    echo '软删除失败!';
}

那如果想要在查询结果中包含软删除的记录呢?可以使用SoftDeletes trait上的withTrashed方法:

$m = 模型::withTrashed()->get();
dd($m);

有时候我们只想要查看被软删除的模型,这也有招,通过SoftDeletes上onlyTrashed方法即可:

$m = 模型::onlyTrashed()->get();
dd($m);

有时候我们需要恢复被软删除的模型,可以使用SoftDeletes提供的restore方法:
恢复单个模型

$m = 模型::find(6);
$m->restore();

恢复多个模型

模型::withTrashed()->where('id','>',1)->restore();

恢复所有模型

模型::withTrashed()->restore();

恢复关联查询模型

$m = 模型::find(6);
$m->history()->restore();

如果模型配置了软删除但我们确实要删除该模型对应数据库表记录,则可以使用SoftDeletes提供的forceDelete方法:

$m = 模型::find(6);
$m->forceDelete();

标签:Laravel,restore,use,删除,Database,模型,SoftDeletes
From: https://www.cnblogs.com/pine007/p/17287333.html

相关文章

  • JavaScript:数组删除指定元素
    1.shift()方法用于删除数组中的第一个元素。注:此方法会改变数组的长度letarr=[1,2,3]arr.shift()//删除1//arr为[2,3]2.pop()方法用于删除数组中最后一个元素注:此方法会改变数组的长度letarr=[1,2,3]arr.pop();//删除3//arr为[1,2]3.splice()方法用于......
  • 阿里巴巴为什么这样强制从List中删除元素
    阿里巴巴为什么这样强制从List中删除元素 还是先举个例子,你侄女对天文知识感兴趣,然后你就用程序写了太阳系九大星系(水星、金星、地球、火星、木星、土星、天王星、海王星、冥王星)的运行轨迹图,然后拿给侄女看。然后她说错了错了,你的知识太旧了,多了一颗星。根据2006年8月24日国......
  • c# list删除元素
    新建一个集合:删除其中一个元素List<String>tempList=newList<string>{"水星","金星","地球","火星","木星","土星","天王星","海王星","冥王星","冥王星"};tempList.Remove("冥王星&qu......
  • Mac - 查找并删除大文件(其他项占用过多解决方案)
    Mac存储空间中「其他」项占用非常大,通过工具来查看文件并清除大文件。工具名称:OmniDiskSweeper官网下载地址OSX里面的Other就是所有其他的文件。所有的文档,包括.pdf.doc.psd所有的压缩文件和磁盘映像包括.zip.dmg.iso所有的用户数据所有的系统文件包括Sy......
  • 最长连续序列(并查集、数组)、复原 IP 地址(字符串、回溯)、删除链表的倒数第 N 个结
    最长连续序列(并查集、数组)给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)__的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4......
  • 恢复出厂设置时删除手机上所有联系人
    修改nvram_common_config.c中相应phonebook的nv项的属性即可,将NVRAM_ATTR_FACTORY_RESET添加到对应nv项属性中。相关的NV项及说明如下:NVRAM_EF_PHB_LN_ENTRY_LID:calllog相关的信息NVRAM_EF_PHB_LID:手机中的联系人信息NVRAM_EF_PHB_GROUP_INFO_LID......
  • 019redis3.0集群删除节点
    1:如果删除的节点是主节点,这里我们删除192.168.2.20:7006节点,这个节点有1000个哈希槽首先要把节点中的哈希槽转移到其他节点中,执行下面的命令cd /usr/local/redis3.0/src./redis-trib.rb reshard 192.168.2.20:7000系统会提示我们要移动多少哈希槽,这里移动1000个,因为192.168.2.20......
  • CentOS 7.x 卸载删除MariaDB,重新安装
    卸载[root@node1~]#rpm-qa|grepmariadbmariadb-5.5.56-2.el7.x86_64mariadb-libs-5.5.56-2.el7.x86_64mariadb-server-5.5.56-2.el7.x86_64[root@node1~]#[root@node1~]#yumremovemariadb...Removed:mariadb.x86_641:5.5.56-2.el7DependencyRemoved:mariadb-server.x......
  • VSCODE 主题 Noctis 删除多余的子主题 和 取消注释斜体
    最近觉得VSCODE的Noctis主题原版的配色很搭,挺养眼的。Noctic原皮预览:但是其他附带的主题不是太喜欢,另外注释也是个人不太喜欢的斜体(英文斜体还好,中文斜体真有点丑)。于是想改一下。取消注释找到下载主题路径,修改json文件:我的路径为:C:\Users\Administrator.vscode\e......
  • laravel8 elasticsearch 配置搭建使用
     laravel8框架 扩展elasticsearch  首先 elasticsearch 的版本号 需要和 扩展的版本号对应composerrequireelasticsearch/elasticsearch 然后是配置到common 调用文件<?phpnamespaceApp\Es;useElasticsearch\ClientBuilder;classMyEs{//......