软删除laravel 5中表中的所有记录

Posted

技术标签:

【中文标题】软删除laravel 5中表中的所有记录【英文标题】:Soft Delete all records from a table in laravel 5 【发布时间】:2017-08-07 10:47:49 【问题描述】:

有什么方法可以软删除表中的所有现有行? 我已经尝试过( Prospect::delete(); )它永久删除了所有行,但它在软删除中不起作用。

【问题讨论】:

添加一列isDeleted并设置为true 正如 juergen 所说,到目前为止,我认为是最简单的方法。我也很困惑......从来没有读过那么多关于软删除的文章,今天它是关于 laravel 中软删除的第 5 个问题 ô.o juergen d,你能解释一下吗? @Moiz 他只是意味着你应该在你的数据库中添加一个isDeleted 列。然后,当您想soft delete 某事时,您只需将此字段设置为 true,否则为 false。然后在你的前端,只显示所有结果where isDeleted = false 谢谢@Twinfriends 【参考方案1】:

如果您使用的是 4.2 之前的 Laravel 框架,那么您可以将模型中的软删除设置为,

class ModelName extends Eloquent 
    protected $table = 'table_name';
    protected $softDelete = true;

如果您使用的是 Laravel 框架 4.2,那么您可以将模型中的软删除设置为,

use Illuminate\Database\Eloquent\SoftDeletingTrait;
class ModelName extends Eloquent 
    use SoftDeletingTrait;
    protected $table = 'table_name';

如果你使用的是4.2以上的Laravel框架,那么你可以在你的模型中设置软删除为,

use Illuminate\Database\Eloquent\SoftDeletes;
class ModelName extends Eloquent 
    use SoftDeletes;
    protected $table = 'table_name';

我希望你使用的是 Laravel 5。所以你可以使用第三种方法。

【讨论】:

【参考方案2】:

看看这个soft delete

在你的模型中使用这个特性:

use Illuminate\Database\Eloquent\SoftDeletes;

并将其添加到您的模型和数据库架构中:

型号:

class Flight extends Model

    use SoftDeletes;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = ['deleted_at'];

数据库架构

Schema::table('flights', function ($table) 
    $table->softDeletes();
);

现在,当您在模型上调用 delete 方法时,deleted_at 列将被设置为当前日期和时间。并且,当查询使用软删除的模型时,软删除的模型将自动从所有查询结果中排除。

要确定给定模型实例是否已被软删除,请使用垃圾箱方法:

if ($flight->trashed()) 
    //

【讨论】:

【参考方案3】:

它通常不会删除数据库中的行。您应该添加一个列 isActive 等并将其设置为 (1/0) 或 (true/false)。 如果你想显示行,你应该 "Select * from table Where isActive=1"

【讨论】:

以上是关于软删除laravel 5中表中的所有记录的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5.4 中检索软删除的用户帖子

Laravel 查询包括软删除的记录

Laravel 5.5 模型上的自定义软删除

laravel and lumen 软删除操作

Laravel - 软删除没有生效

Laravel5.1 模型 --软删除