删除
你可以在将数据写入数据库后删除数据。如果已检索模型实例,则可以删除模型实例,也可以指定要删除的记录的条件。
要删除模型实例,请检索它并调用 delete()
方法:
$user = User::find(1);
$user->delete();
或者,你可以通过 destroy()
方法指定要删除的记录的主键(或主键数组):
User::destroy(1);
User::destroy([1, 2, 3]);
你还可以将查询与删除相结合:
User::where('age', '<', 21)->delete();
这将删除符合条件的所有用户。
注意:通过 Eloquent 执行批量删除语句时,不会为已删除的模型触发
deleting
和deleted
模型事件。这是因为在执行 delete 语句时从不实际检索模型。
软删除
有时你不希望永久删除记录,而是将其保留用于审计或报告目的。为此,Eloquent 提供软删除功能。
要向模型添加软删除功能,你需要导入 SoftDeletes
特征并将其添加到你的 Eloquent 模型类:
namespace Illuminate\Database\Eloquent\Model;
namespace Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
删除模型时,它会在模型表中的 deleted_at
时间戳列上设置时间戳,因此请务必先在表格中创建 deleted_at
列。或者在迁移中,你应该在蓝图上调用 softDeletes()
方法来添加 deleted_at
时间戳。例:
Schema::table('users', function ($table) {
$table->softDeletes();
});
任何查询都将省略软删除的记录。如果你愿意,可以使用 withTrashed()
示波器强制显示它们:
User::withTrashed()->get();
如果你希望允许用户在软删除后恢复记录(即在垃圾桶类型区域中),那么你可以使用 restore()
方法:
$user = User::find(1);
$user->delete();
$user->restore();
要强制删除记录,请使用 forceDelete()
方法,该方法将从数据库中真正删除记录:
$user = User::find(1);
$user->forceDelete();