假设我有类别表并且我在上面使用了软删除。现在我第一次添加了一个类别“测试”,之后我删除了这个类别,因此它将更新数据库中的 deleted_at
列。
现在,当我再次尝试添加名称为“Test”的类别时,它告诉我这个名称已被占用。我试过发布的规则 Here .
但它不起作用。我在我的模型中使用了特征。下面是我的模型代码。
<?php
namespace App\Models;
use Illuminate\Support\Facades\Validator as Validator;
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class Category extends \Eloquent {
use SoftDeletingTrait;
protected $dates = ['deleted_at'];
/**
* Guarded fields which are not mass fillable
*
* @var array
*/
protected $guarded = array('id');
/**
* Name of the table used
*
* @var string
*/
protected $table = 'travel_categories';
/**
* Validating input.
*
* @param array $input
* @return mixed (boolean | array)
*/
public static function validate($input, $id = null) {
$rules = array(
'name' => array('required','min:2','max:100','regex:/[a-zA-z ]/','unique:travel_categories,name,NULL,id,deleted_at,NULL'),
'description' => 'Required|Min:2',
'image' => 'image'
);
if ($id) {
$rules['name'] = 'Required|Between:3,64|Unique:travel_categories,name,'.$id;
}
$validation = Validator::make($input,$rules);
return ($validation->passes())?true : $validation->messages();
}
}
最佳答案
你了解软删除的目的吗?它只会将数据标记为非事件状态。不过它会在那里。
因此,如果您定义该列的值必须是唯一的,那么您就不能创建其他类似的值。
- 如果它需要是唯一的,那么您应该
恢复
和更新
数据。 - 如果它可以有很多个,那么你应该删除应用在它上面的唯一键(例如通过关系调用它)。
关于php - Laravel 软删除唯一列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26424294/