描述
很多時候,我們為了確保不丟失業務資料,會使用軟刪除的方法刪除資料。
使用軟刪除的方法:
migrate檔案:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Test extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
// .. 等等其他欄位
$table->softDeletes();
});
}
}
Models:
<?php
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
use SoftDeletes;
}
目前發現的問題及解決方法
問題1: 帶唯一索引的軟刪除
程式碼模型和欄位新增了軟刪除deleted_at,同時表又新增了唯一欄位(如手機號),軟刪以後,別人重新新增這個唯一欄位(如手機號)將無法新增資料,因為記錄還在,只是deleted_at 賦了時間值 。
- 方法一: 如果庫表如果有唯一索引欄位,插入時或查詢是否有值時請自行呼叫withTrashed方法進行包含deleted_at 判斷軟刪除是否有唯一索引欄位值。
- 方法二: 表欄位不新增唯一索引, 通過業務控制唯一性。
- 方法三: 唯一欄位和軟刪除欄位deleted_at 建立聯合唯一。
- 方法四: 如果必須要使用唯一鍵控制又不聯合deleted_at 唯一,放棄使用軟刪除。
- 方法五: 參照下方評論,有很多牛人提出瞭解決辦法和寫了方法包。
本作品採用《CC 協議》,轉載必須註明作者和本文連結