在我们的项目中,我们必须对每个帖子使用软删除。在laravel文档中,我认为我们只能将此功能用于表格。
我们可以将它用于表格上的帖子,例如
$id = Contents::find( $id );
$id->softDeletes();
答案 0 :(得分:56)
当软删除模型时,它实际上并未从您的模型中删除 数据库。而是在记录上设置deleted_at时间戳。至 为模型启用软删除,指定softDelete属性 模型(Documentation):
例如(使用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
。查询使用软删除的模型时,“已删除”模型将不会包含在查询结果中。要soft delete
您可以使用的模型:
$model = Contents::find( $id );
$model->delete();
已删除(软)模型由timestamp
标识,如果deleted_at
字段为NULL
,则不会将其删除,并使用restore
方法实际生成{{1} }} field deleted_at
。要使用NULL
方法永久删除模型。
forceDelete
use Illuminate\Database\Eloquent\SoftDeletingTrait; // <-- This is required
class Post extends Eloquent {
use SoftDeletingTrait; // <-- Use This Insteaf Of protected $softDelete = true;
protected $table = 'posts';
// ...
}
答案 1 :(得分:17)
您实际上是正常删除。但是在模型上,您指定它是一个软删除模型。
所以在你的模型上添加代码:
class Contents extends Eloquent {
use SoftDeletingTrait;
protected $dates = ['deleted_at'];
}
然后在您的代码上执行正常删除,如:
$id = Contents::find( $id );
$id ->delete();
另外,请确保您的桌子上有deleted_at
列。
或者只看文档:{{3}}
答案 2 :(得分:4)
只是Laravel 5的更新:
在Laravel 4.2中:
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'];
答案 3 :(得分:2)
在Laravel 5.5 Soft Deleted作品中(对我而言)。
数据库
deleted_at 字段,默认 NULL 值
<强>模型强>
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model {
use SoftDeletes;
}
<强>控制器强>
public function destroy($id)
{
User::find($id)->delete();
}
答案 4 :(得分:1)
在最新版本的Laravel中,即 Laravel 5.0以上。执行此任务非常简单。 在模型中,在类内部只需编写“ 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();
确保在用户表中必须具有“ deleted_at”列。
答案 5 :(得分:0)
以下是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列将设置为当前时间戳。查询使用软删除的模型时,&#34;删除&#34;模型不会包含在查询结果中。
答案 6 :(得分:0)
我刚刚在 Laravel 8 上做到了这一点,它奏效了。这基本上是@The alpha 所说的,但试图更快地包装所有内容。请按照以下步骤操作。
在迁移文件中添加:
$table->softDeletes();
在模型中:
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
...
];
}
在控制器中:
$user->delete();
奖励:如果您需要恢复已删除的用户
User::withTrashed()->find($id);->restore();