一、直接删除
1,通过模型对象删除
要删除一个模型,调用模型实例上的 delete 方法即可。
$user = User::find(6);
$user->delete();
2,通过查询删除模型
我们也可以通过查询来同时删除多个模型。
User::where('id', '>', 3)->delete();
3,通过主键删除模型
如果我们知道模型的主键的话,可以使用 destroy 方法直接删除,而不需先获取这个模型。
User::destroy(1);
User::destroy([1, 2, 3]);
User::destroy(1, 2, 3);
二、软删除
软删除: 当模型被软删除后,它们并没有真的从数据库删除,而是在模型上设置一个 deleted_at 属性并插入数据库。如果模型有一个非空 deleted_at 值,那么表示该模型已经被软删除了。
1,启用软删除功能
(1)要启用软删除功能,我们首先需要加入 deleted_at 字段到数据库表,当模型使用软删除功能时会自动更新这个字段。
(2)然后在模型类里加入 SoftDeletes 特性即可。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model {
use SoftDeletes;
public $timestamps = false;
}
2,软删除测试
(1)下面我们使用 delete 删除一个 id 为 3 的模型数据。
$user = User::find(3);
$user->delete();
2)删除后再次查询这条数据可以发现为 null,说明已经删除。
$user = User::find(3);
var_dump($user);
(3)打开数据库可以看到,这条数据其实还是存在的,只不过 deleted_at 字段更新了个删除时间。
3,查询被软删除的数据
(1)普通查询方法只能查询到 deleted_at 为 NULL 的数据,如果想让已被软删除的模型数据出现在查询结果里,在查询时使用 withTrashed 方法:
$users = User::withTrashed()
->where('id', '>', 1)
->get();
(2)如果想只查询被软删除的模型数据,可以使用 onlyTrashed 方法:
$users = User::onlyTrashed()
->where('id', '>', 1)
->get();
4,恢复被软删除的数据
(1)要把被软删除的模型数据恢复,使用 restore 方法。
$user->restore();
(2)也可以结合查询语句使用 restore 方法:
$users = User::withTrashed()
->where('id', '>', 1)
->restore();
5,彻底删除数据
如果想要真的从模型数据库删除,使用 forceDelete 方法。
$user = User::find(6);
$user->forceDelete();
6,判断数据是否被软删除
如果要确认模型是否被软删除了,可以使用 trashed 方法。
$user = User::withTrashed()->find(3);
if ($user->trashed()) {
echo "被软删除了";
}