如何在Laravel 4中软删除模型

时间:2015-08-10 10:10:30

标签: php laravel-4

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

2 个答案:

答案 0 :(得分:1)

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

$table->softDeletes();

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

创建和运行迁移之一,您需要将表格附加到Ad模型,并且您的模型需要使用SoftDeletingTrait,如下所示:

use Illuminate\Database\Eloquent\SoftDeletingTrait;

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

答案 1 :(得分:0)

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

对于软删除:

use Illuminate\Database\Eloquent\SoftDeletingTrait;

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