Laravel 软删除所有坑及解决办法 - 持续更新
描述
很多时候,我们为了确保不丢失业务数据,会使用软删除的方法删除数据。
使用软删除的方法:
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 协议》,转载必须注明作者和本文链接
推荐文章: