Laravel:软删除项目

时间:2018-11-07 10:33:14

标签: php laravel soft-delete

我只想删除“概述”页面上的项目,但是我希望将元素保留在数据库中。有可能吗?

您对程序有想法吗?

我不知道如何进行软删除,在我的控制器中,我有

public function destroy(Devis $devis)
     {
         $devis->delete();
         return redirect('/admin');
     }

在我的路线上,我有

Route::group(['middleware' => ['auth']], function () {
    Route::get('/admin', 'AdminController@getHome');
    Route::get('/valider/{devis}', 'AdminController@destroy');
});

在我的文件概述中,我拥有

@foreach($devis as $item)
                <tr>
                   <td> {{$item->firstname}}</td>
                   <td> {{$item->lastname}} </td>
                   <td> {{$item->phone}} </td>
                   <td> {{$item->start_adress}} --  {{$item->start_floor}}</td>
                   <td> {{$item->end_adress}} --  {{$item->end_floor}}</td>
                   <td> {{$item->type_intervention}}</td>
                   <td> {{$item->email}} </td>
                   <td> {{$item->remarks}} </td>
                   <td> <a href="/valider/{{$item->id}}" class="btn btn-danger"><span class="left ion-close"></span></a></td>
                </tr>
              @endforeach

6 个答案:

答案 0 :(得分:1)

  

使用软删除,您可以标记不再显示的项目   在应用程序中。   Laravel本机支持软删除,您只需要在   您需要的特定型号。

Laravel 5或更高版本中,如果您具有模型 Book ,则要启用它,您需要:

1。创建新的迁移

 $ php artisan make:migration add_soft_delete_to_books --table=books

2。修改迁移并添加“ deleted_at”列。 Laravel模式构建器包含用于创建此列的辅助方法 softDeletes()

public function up()
{
     Schema::table('books', function(Blueprint $table){
        $table->softDeletes();
    });
 }

public function down()
{
    Schema::table('books', function(Blueprint $table){
        $table->dropColumn('deleted_at');
    });
}

3)运行迁移

$ php artisan migrate

4)打开Book模型并添加SoftDelete特性

<?php 
    namespace App;
    use Illuminate\Database\Eloquent\Model;
     use Illuminate\Database\Eloquent\SoftDeletes;

 class Book extends Model {  
    use SoftDeletes;  
    protected $dates = ['deleted_at'];  
}  

5)下次删除与此模型关联的记录时,delete_at列将设置为当前时间戳。

任何在时间戳上设置了delete_at时间戳的记录都不会包含在任何检索到的结果中。 6)如果需要在任何雄辩的查询结果中包括软删除的记录,则可以使用withTrashed方法:

$Books = Book::withTrashed()->get();

您会在此处找到官方documentation

答案 1 :(得分:0)

当您要软删除时,实际上需要一个标志。假设您的表格中有一列 deleted ,该列接受布尔值。

当您在控制器中检索数据以将其传递到视图时,您将查询表,只需在查询中添加where子句即可,例如:

->where('deleted',0)

因此您获得了“未删除”的项目。

现在,当您要进行软删除时,实际上并没有删除,而是更新列以将其状态设置为1。

答案 2 :(得分:0)

使用此命令:Documentation soft deleting 以后增加下载项目的条件

->whereNull('deleted_at')

答案 3 :(得分:0)

创建表时,必须将字段添加到soft delete。最好是迁移。如果可以,您将使用soft delete,然后:

$ item-> delete () - will be softdelete

$ item-> forcedelete () - will permanently delete

答案 4 :(得分:0)

Laravel具有自己的软删除实现。只需将use SoftDeletes添加到您的模型中,它就会开始工作。尝试阅读Eloquent - Soft deletes,以了解有关它及其对代码的影响的更多信息。

答案 5 :(得分:0)

Laravel已经做到了here,因此您在模型中添加了deleted_at  正如文档所说,您的模型如下:

  namespace App;

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

class Flight extends Model
{
    use SoftDeletes;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = ['deleted_at'];
}