php Laravel Soft删除帖子

agxfikkp  于 2023-09-29  发布在  PHP
关注(0)|答案(8)|浏览(133)

在我们的项目中,我们必须使用软删除每个职位。在laravel文档中,我认为我们只能对表使用此功能。

  • 我们可以用它来写table上的帖子吗 *
$id = Contents::find($id);
$id->softDeletes();
quhf5bfb

quhf5bfb1#

更新版本(5.0及以后版本):

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model {

    use SoftDeletes;

    protected $table = 'posts';

    // ...
}

当软删除模型时,它实际上并没有从数据库中删除。相反,在记录上设置deleted_at时间戳。要为模型启用软删除,请在模型上指定softDelete属性(文档)。

适用于(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方法:
例如(迁移类的posts表的up方法):

/**
 * 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方法实际上使deleted_at字段NULL。要永久删除模型,您可以使用forceDelete方法。

8cdiaqws

8cdiaqws2#

你实际上做的是正常的删除。但是在模型上,您指定它是一个软删除模型。
所以在你的模型上添加代码:

class Contents extends Eloquent {

    use SoftDeletingTrait;

    protected $dates = ['deleted_at'];

}

然后在你的代码中执行正常的删除操作,如下所示:

$id = Contents::find( $id );
$id ->delete();

同时确保表中有deleted_at列。
或者直接看docs:http://laravel.com/docs/eloquent#soft-deleting

thtygnil

thtygnil3#

我刚刚用Laravel 8做了这个,它工作了。这基本上就是“阿尔法说的,但试图更快地 Package 所有内容。按照以下步骤操作。
migration文件中添加:

$table->softDeletes();

型号中:

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
    ...
];

}
控制器中:

$user->delete();

奖励:如果需要恢复已删除用户

User::withTrashed()->find($id);->restore();
628mspwn

628mspwn4#

更新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'];
kd3sttzy

kd3sttzy5#

在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();
}
y3bcpkx1

y3bcpkx16#

在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', '[email protected]')->delete();

User::where('email', '[email protected]')->softDeletes();

确保你必须在用户表中有'deleted_at'列。

kcwpcxri

kcwpcxri7#

以下是来自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列将被设置为当前时间戳。当查询使用软删除的模型时,“已删除”的模型将不会包含在查询结果中。

92dk7w1h

92dk7w1h8#

更新版本(5.0及以上)

要启用此功能,我们需要在数据库(或迁移)中添加一个deleted_at列,用于Map目的。

例如:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        ...
        $table->softDeletes(); // soft delete
    });
}

另外,我们需要在模型上使用Illuminate\Database\Eloquent\SoftDeletes trait

例如:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;

}

我们现在可以像以前一样调用delete()方法

$user->delete();

官方文件请点击这里。

相关问题