laravel5.2軟刪除
阿新 • • 發佈:2018-11-06
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資料夾下會生成一個相應檔案,更改如下useIlluminate\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();