您现在的位置是:网站首页 > 心得笔记

laravel 模型删除及软删除相关实现

盛悦2018-12-29594人围观
简介讲述laravel 模型删除及软删除相关实现以及实例分析

删除模型

1、直接在模型实例上调用delete()方法实现删除

$note = App\Model\Admin\Note::find($id);// 通过主键取回一个模型...
$note->delete();

//你也可以用主键数组为参数调用 find 方法,它将返回匹配记录的集合:$note = App\Model\Admin\Note::find([1,2,3]);

Note:这种方式是调用delete()之前先从数据库中检索模型,如果你已经知道模型的主键,可直接通过destroy($primary_id)删除模型

 

2、通过主键删除模型

$note = App\Model\Admin\Note::destroy($id);

//例如

App\Model\Admin\Note::destroy(1);//删除主键为1的这条数据
App\Model\Admin\Note::destroy([1,2,3]);//批量删除主键为1、2、3的数据
App\Model\Admin\Note::destroy(1,2,3);//批量删除主键为1、2、3的数据

 

3、通过查询删除模型

App\Model\Admin\Note::where('status',1)->delete();//删除所有status=0的数据

 

软删除

除了真的从数据库中删除记录,也可以软删除模型。当模型被软删除时,他们并不是真的从数据库中删除。

要实现软删除,必须满足以下几个条件:

1、在模型中 use Illuminate\Database\Eloquent\SoftDeletes;

2、模型类中  use SoftDeletes

3、模型类中将记录删除标识的deleted_at字段到 $dates 属性上

4、在数据表中添加deleted_at字段,默认为null,当为空时表示数据未删除,否则表示数据已删除,而deleted_at的值正式数据被删除的时间

<?php
    namespace App\Model\Admin;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\SoftDeletes;
    
    class Note extends Model{
    use SoftDeletes;//注意:一定要use软删除类,否则实现不了

    /**
     * 需要被转换成日期的属性。
     *
     * @var array
     */
    protected $dates = ['deleted_at'];}

 

当你调用模型上 delete 方法时,deleted_at 字段会被设置为当前的日期和时间。而且,当查询使用软删除的模型时,被软删除的模型将自动从所有查询结果中排除。

判断给定模型实例是否已被软删除,可以使用 trashed 方法:

if ($flight->trashed()) {
    //
}

 

查询被软删除的模型

被软删除的模型将自动从查询结果中排除。但是如果你可以使用withTrashed()方法强制将软删除结果出现在结果集中。

$list = Note::orderBy('id','desc');//查询结果集如下:Collection {#656 ▼
  #items: array:9 [▼
    0 => Note {#657 ▶}
    1 => Note {#658 ▶}
    2 => Note {#659 ▶}
    3 => Note {#660 ▶}
    4 => Note {#661 ▶}
    5 => Note {#662 ▶}
    6 => Note {#663 ▶}
    7 => Note {#664 ▶}
    8 => Note {#665 ▶}
  ]}$list = Note::withTrashed()->orderBy('id','desc');//查询结果集如下:Collection {#655 ▼
  #items: array:10 [▼
    0 => Note {#656 ▶}
    1 => Note {#657 ▶}
    2 => Note {#658 ▶}
    3 => Note {#659 ▶}
    4 => Note {#660 ▶}
    5 => Note {#661 ▶}
    6 => Note {#662 ▶}
    7 => Note {#663 ▶}
    8 => Note {#664 ▶}
    9 => Note {#665 ▶}
  ]}

 

只检索被软删除的模型

$notes= Note::onlyTrashed()->get();