您现在的位置是:网站首页 > 心得笔记
laravel 模型删除及软删除相关实现
简介讲述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();