如何在Laravel 4中软删除模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Laravel 4中软删除模型相关的知识,希望对你有一定的参考价值。

我有一张Advertisements表,我需要暂时删除一条可以再次启用的记录,我也可以获取已删除的结果。

答案

你只需要在你的Advertisement.php(广告模型)中添加软删除特征

对于软删除:

use IlluminateDatabaseEloquentSoftDeletingTrait;

class Advertisement extends Eloquent {

    use SoftDeletingTrait; 

    .....
}

接下来,您需要在表deleted_at(timestamp,default null)中添加一列,现在当您正常删除广告时

$advertisement = Advertisement::find($id);
$advertisement->delete();

它将在deleted_at列中添加当前时间戳,并且在deleted_at列具有值之前不会获取该特定行。

要获取所有软删除的值:

$deletedAdvertisement = Advertisement::onlyTrashed()->get();

您可以使用文档获取更多信息:

http://laravel.com/docs/4.2/eloquent#insert-update-delete

另一答案

如果您使用迁移创建了表,则需要将其添加到迁移文件中:

$table->softDeletes();

这里有关于迁移的更多信息:http://laravel.com/docs/4.2/migrations#creating-migrations

一个迁移创建和运行你需要将你的表附加到一个Ad模型,你的模型需要像这样使用SoftDeletingTrait

use IlluminateDatabaseEloquentSoftDeletingTrait;

class Ad extends Eloquent {

  use SoftDeletingTrait;
  protected $dates = ['deleted_at'];
  // ...

}

而现在查询模型“已删除”的模型将不会包含在查询结果中,如果你愿意,你可以像这样使用withTrashed()方法:

 Ad::withTrashed()->all();

如果你只想删除一个使用:

 Ad::onlyTrashed()->all();

有关软删除的更多信息:http://laravel.com/docs/4.2/eloquent#soft-deleting

以上是关于如何在Laravel 4中软删除模型的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何在控制器的几种方法中重用代码片段

教程4 - 验证和权限

Laravel 的模型之一未调用已删除的方法

如何使用 jquery 从 asp.net 视图模型中动态删除行而不删除集合中的其余下一个对象

linux 系统中软连接的创建,修改,删除

Laravel 4 PHPUnit Sqlite 数据库,每次测试前删除项目