软删除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中表中的所有记录的主要内容,如果未能解决你的问题,请参考以下文章