1. 程式人生 > >laravel5.2軟刪除

laravel5.2軟刪除

1.做一些設定

  首先在模型類中要使用SoftDeletestrait,該trait為軟刪除提供一系列相關方法,具體可參考原始碼Illuminate\Database\Eloquent\SoftDeletes,此外還要設定$date屬性陣列,將deleted_at置於其中:
    namespace App\Models; 

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

    class Post extends Model { 
        
use SoftDeletes; //...其他一些設定 protected $dates = ['delete_at']; }

 

2.向資料庫中的相應資料表新增delete_at欄位

  1>這裡我們使用資料遷移來實現    php artisan make:migration alter_posts_deleted_at --table=posts     2>此時在database/migrations資料夾下會生成一個相應檔案,更改如下
   use
Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AlterPostsDeletedAt extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('posts', function
(Blueprint $table) { $table->softDeletes(); }); } ...//其它方法 }

 

  3>再次執行命令  php artisan migrate ,發現數據庫相應的資料表中已經有delete_at欄位了  

3.使用方法

  在模型上呼叫 delete 方法時,deleted_at 欄位將會被設定成目前的日期和時間。而且,當查詢有啟用軟刪除的模型時,被軟刪除的模型將會自動從所有查詢結果中排除。
  //在模型上呼叫delete方法
  $post = Post::find(6); $post->delete();

  //要確認指定的模型例項是否已經被軟刪除,可以使用 trashed 方法:  
   if($post->trashed()){
    echo '軟刪除成功!';
    dd($post);
  }else{
    echo '軟刪除失敗!';
  }
 
  //查詢被軟刪除的模型
  $flights = App\Flight::withTrashed() ->where('account_id', 1) ->get();
 
  //onlyTrashed 方法會只獲取已被軟刪除的模型:
  $flights = App\Flight::onlyTrashed() ->where('airline_id', 1) ->get();
 
  //恢復單個已經被軟刪除的模型
  $flight = Flight::withTrashed()-find(1); //這裡要注意如果被軟刪除直接find是查不到的
  $flight->restore();

  //恢復多個模型
  App\Flight::withTrashed() ->where('airline_id', 1) ->restore();
 
  // 強制刪除單個模型例項...
  $flight->forceDelete();

  // 強制刪除所有相關模型...
  $flight->history()->forceDelete();