Laravel 5:如何检索已删除的相关模型

作者:编程家 分类: laravel 时间:2025-08-01

如何检索已删除的相关模型

在 Laravel 5 中,当我们使用软删除功能删除模型时,这些模型并没有真正地从数据库中删除,而是通过在数据库中添加一个删除标记来表示它们已被删除。这个删除标记可以帮助我们在需要的时候检索已删除的相关模型,以便进行进一步的操作。

使用软删除功能

在 Laravel 5 中,要启用软删除功能,我们需要在相关模型中使用 `SoftDeletes` trait。这个 trait 提供了一个 `delete` 方法,用于标记模型为已删除,并更新相应的删除时间戳。

首先,我们需要在相关模型中引入 `SoftDeletes` trait:

php

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model

{

use SoftDeletes;

// ...

}

接下来,我们需要在数据库迁移文件中添加一个 `deleted_at` 字段,用于存储删除时间戳:

php

public function up()

{

Schema::table('posts', function (Blueprint $table) {

$table->softDeletes();

});

}

一旦我们完成了上述步骤,就可以使用软删除功能了。

检索已删除的相关模型

要检索已删除的相关模型,我们可以使用 `withTrashed` 方法。这个方法会返回包括已删除模型在内的所有相关模型。

php

$posts = Post::withTrashed()->where('category', 'news')->get();

上面的代码将返回一个包含所有分类为 "news" 的文章模型的集合,包括已删除的文章模型。

我们还可以使用 `onlyTrashed` 方法来只检索已删除的相关模型:

php

$deletedPosts = Post::onlyTrashed()->get();

上面的代码将返回一个只包含已删除文章模型的集合。

还原已删除的相关模型

如果我们想还原一个已删除的模型,可以使用 `restore` 方法:

php

$deletedPost = Post::onlyTrashed()->where('id', 1)->first();

if ($deletedPost) {

$deletedPost->restore();

}

上面的代码将还原 ID 为 1 的已删除文章模型。

永久删除相关模型

如果我们想永久删除一个已删除的模型,可以使用 `forceDelete` 方法:

php

$deletedPost = Post::onlyTrashed()->where('id', 1)->first();

if ($deletedPost) {

$deletedPost->forceDelete();

}

上面的代码将永久删除 ID 为 1 的已删除文章模型。

在 Laravel 5 中,通过使用软删除功能,我们可以轻松地检索已删除的相关模型,并进行进一步的操作。我们只需要在相关模型中引入 `SoftDeletes` trait,并在数据库迁移文件中添加 `deleted_at` 字段。然后,我们可以使用 `withTrashed` 方法来检索包括已删除模型在内的所有相关模型,使用 `onlyTrashed` 方法来只检索已删除的相关模型,使用 `restore` 方法来还原一个已删除的模型,以及使用 `forceDelete` 方法来永久删除一个已删除的模型。