Laravel软删除帖子


Laravel Soft Delete posts

在我们的项目中,我们必须对每个帖子使用软删除。

我们是否可以将其用于

等表上的帖子?
$id = Contents::find($id);
$id->softDeletes();

更新版本(Version 5.0 &后):

use Illuminate'Database'Eloquent'Model;
use Illuminate'Database'Eloquent'SoftDeletes;
class Post extends Model {
    use SoftDeletes;
    protected $table = 'posts';
    // ...
}

当软删除一个模型时,它实际上并没有从您的数据库。相反,在记录上设置deleted_at时间戳。来为模型启用软删除,指定softDelete属性模型(文档)。

For (Version 4.2):

use Illuminate'Database'Eloquent'SoftDeletingTrait; // <-- This is required
class Post extends Eloquent {
    use SoftDeletingTrait;
    protected $table = 'posts';
    // ...
}

4.2版本之前(但不是4.2版本)&)

示例(使用posts表和Post模型):

class Post extends Eloquent {
    protected $table = 'posts';
    protected $softDelete = true;
    
    // ...
}

要在表中添加deleted_at列,可以使用softDeletes方法:

示例(迁移类的up方法用于posts表):

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('posts', function(Blueprint $table)
    {
        $table->increments('id');
        // more fields
        $table->softDeletes(); // <-- This will add a deleted_at field
        $table->timeStamps();
    });
}

现在,当您调用模型上的delete方法时,deleted_at列将被设置为当前的timestamp。查询使用软删除的模型时,"deleted"模型不会包含在查询结果中。要soft delete一个模型,您可以使用:

$model = Contents::find( $id );
$model->delete();

删除(软)模型由timestamp识别,如果deleted_at字段为NULL,则未删除,使用restore方法实际上使deleted_at字段为NULL。要永久删除模型,可以使用forceDelete方法。

实际执行的是普通的删除操作。但是在模型中,您指定它是一个软删除模型。

所以在你的模型上添加代码:

class Contents extends Eloquent {
    use SoftDeletingTrait;
    protected $dates = ['deleted_at'];
}

然后在代码中执行正常的删除操作,如:

$id = Contents::find( $id );
$id ->delete();

还要确保表中有deleted_at列。

或者直接查看文档:http://laravel.com/docs/eloquent#soft-deleting

我刚刚用Laravel 8做了这个,它工作了。这基本上是@The alpha说的,但试图更快地包装一切。请按照以下步骤操作。

迁移文件中添加:

$table->softDeletes();

模型中:

use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model
{
    use SoftDeletes;
    ...
];

}

控制器:

$user->delete();

奖励:如果您需要恢复已删除的用户

User::withTrashed()->find($id);->restore();

关于Laravel 5的更新:

use Illuminate'Database'Eloquent'SoftDeletingTrait;    
class Post extends Eloquent {
    use SoftDeletingTrait;
    protected $dates = ['deleted_at'];
}

变成了Laravel 5:

use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model {
    use SoftDeletes;
    protected $dates = ['deleted_at'];

在Laravel 5.5软删除作品(为我)。

数据库

deleted_at 字段,默认

价值

use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model {
    use SoftDeletes;
}
控制器

public function destroy($id)
{
    User::find($id)->delete();
}

在最新版本的Laravel即高于Laravel 5.0。执行这项任务很简单。在Model中,在类中只写"use SoftDeletes"。示例

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model
{
    use SoftDeletes;
}

在Controller中,你可以做删除。示例

User::where('email', 'youremail@example.com')->delete();

User::where('email', 'youremail@example.com')->softDeletes();

确保在users表中必须有'deleted_at'列

以下是来自laravel.com的详细信息

http://laravel.com/docs/eloquent soft-deleting

当软删除模型时,它实际上并没有从数据库中删除。相反,在记录上设置一个deleted_at时间戳。要为模型启用软删除,请在模型上指定softDelete属性:

class User extends Eloquent {
    protected $softDelete = true;
}

要在表中添加deleted_at列,可以使用迁移中的softDeletes方法:

$table->softDeletes();

现在,当您调用模型上的delete方法时,deleted_at列将被设置为当前时间戳。当查询使用软删除的模型时,"被删除的"模型将不包含在查询结果中。