删除

你可以在将数据写入数据库后删除数据。如果已检索模型实例,则可以删除模型实例,也可以指定要删除的记录的条件。

要删除模型实例,请检索它并调用 delete() 方法:

$user = User::find(1);
$user->delete();

或者,你可以通过 destroy() 方法指定要删除的记录的主键(或主键数组):

User::destroy(1);
User::destroy([1, 2, 3]);

你还可以将查询与删除相结合:

User::where('age', '<', 21)->delete();

这将删除符合条件的所有用户。

注意:通过 Eloquent 执行批量删除语句时,不会为已删除的模型触发 deletingdeleted 模型事件。这是因为在执行 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();