在我们的项目中,我们必须对每个帖子使用软删除。
我们是否可以将其用于
等表上的帖子?$id = Contents::find($id);
$id->softDeletes();
更新版本(Version 5.0 &后):
use Illuminate'Database'Eloquent'Model;
use Illuminate'Database'Eloquent'SoftDeletes;
class Post extends Model {
use SoftDeletes;
protected $table = 'posts';
// ...
}
当软删除一个模型时,它实际上并没有从您的数据库。相反,在记录上设置
deleted_at
时间戳。来为模型启用软删除,指定softDelete
属性模型(文档)。
For (Version 4.2):
use Illuminate'Database'Eloquent'SoftDeletingTrait; // <-- This is required
class Post extends Eloquent {
use SoftDeletingTrait;
protected $table = 'posts';
// ...
}
4.2版本之前(但不是4.2版本)&)
示例(使用posts
表和Post
模型):
class Post extends Eloquent {
protected $table = 'posts';
protected $softDelete = true;
// ...
}
要在表中添加deleted_at列,可以使用
softDeletes
方法:
示例(迁移类的up
方法用于posts
表):
/**
* 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();
});
}
现在,当您调用模型上的delete
方法时,deleted_at
列将被设置为当前的timestamp
。查询使用软删除的模型时,"deleted"模型不会包含在查询结果中。要soft delete
一个模型,您可以使用:
$model = Contents::find( $id );
$model->delete();
删除(软)模型由timestamp
识别,如果deleted_at
字段为NULL
,则未删除,使用restore
方法实际上使deleted_at
字段为NULL
。要永久删除模型,可以使用forceDelete
方法。
实际执行的是普通的删除操作。但是在模型中,您指定它是一个软删除模型。
所以在你的模型上添加代码:
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
我刚刚用Laravel 8做了这个,它工作了。这基本上是@The alpha说的,但试图更快地包装一切。请按照以下步骤操作。
在迁移文件中添加:
$table->softDeletes();
模型中:
use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model
{
use SoftDeletes;
...
];
}
控制器:
$user->delete();
奖励:如果您需要恢复已删除的用户
User::withTrashed()->find($id);->restore();
关于Laravel 5的更新:
use Illuminate'Database'Eloquent'SoftDeletingTrait;
class Post extends Eloquent {
use SoftDeletingTrait;
protected $dates = ['deleted_at'];
}
变成了Laravel 5:
use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model {
use SoftDeletes;
protected $dates = ['deleted_at'];
在Laravel 5.5软删除作品(为我)。
数据库
deleted_at 字段,默认空
价值use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model {
use SoftDeletes;
}
控制器public function destroy($id)
{
User::find($id)->delete();
}
在最新版本的Laravel即高于Laravel 5.0。执行这项任务很简单。在Model中,在类中只写"use SoftDeletes"。示例
<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
use Illuminate'Database'Eloquent'SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
在Controller中,你可以做删除。示例
User::where('email', 'youremail@example.com')->delete();
或
User::where('email', 'youremail@example.com')->softDeletes();
确保在users表中必须有'deleted_at'列
以下是来自laravel.com的详细信息
http://laravel.com/docs/eloquent soft-deleting
当软删除模型时,它实际上并没有从数据库中删除。相反,在记录上设置一个deleted_at时间戳。要为模型启用软删除,请在模型上指定softDelete
属性:
class User extends Eloquent {
protected $softDelete = true;
}
要在表中添加deleted_at列,可以使用迁移中的softDeletes
方法:
$table->softDeletes();
现在,当您调用模型上的delete方法时,deleted_at列将被设置为当前时间戳。当查询使用软删除的模型时,"被删除的"模型将不包含在查询结果中。