拉拉维尔软删除帖子

2022-08-30 11:23:30

在我们的项目中,我们必须对每个帖子使用软删除。在laravel文档中,我认为我们只能将此功能用于表格。

我们可以将其用于桌子上的帖子,例如

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

答案 1

更新版本(版本 5.0 及更高版本):

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model {

    use SoftDeletes;

    protected $table = 'posts';

    // ...
}

软删除模型时,实际上不会从数据库中删除该模型。而是在记录上设置时间戳。要为模型启用软删除,请在模型上指定属性(文档)。deleted_atsoftDelete

对于(版本 4.2):

use Illuminate\Database\Eloquent\SoftDeletingTrait; // <-- This is required

class Post extends Eloquent {

    use SoftDeletingTrait;

    protected $table = 'posts';

    // ...
}

在版本 4.2 之前(但不是 4.2 及更高版本)

例如(使用表和模型):postsPost

class Post extends Eloquent {

    protected $table = 'posts';
    protected $softDelete = true;
    
    // ...
}

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

例如(表的迁移类方法):upposts

/**
 * 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();
    });
}

现在,当您在模型上调用该方法时,该列将设置为当前 。查询使用软删除的模型时,“已删除”模型将不包括在查询结果中。对于模型,您可以使用:deletedeleted_attimestampsoft delete

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

已删除的(软)模型由 和 如果字段是,则不会将其删除,并且使用该方法实际上会使字段 。要永久删除模型,您可以使用方法。timestampdeleted_atNULLrestoredeleted_atNULLforceDelete


答案 2

您实际上执行了正常删除。但是在模型上,您指定它是一个软删除模型。

因此,在您的模型上添加代码:

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


推荐