如何忽略软删除字段并检查Laravel验证中的唯一值?

时间:2018-05-25 12:09:37

标签: laravel laravel-validation

我的表架构具有以下结构:

e_base
s_id | e_id | e_name    | deleted_at
4   1   estatex | 2018-05-25 13:33:36

Validation Rule:

$validator = Validator::make($request->all(),[
    'e_id'  =>  'required|unique:e_base,e_id'
]);

if($validator->fails()) {
   return Response::json($validator->getMessageBag()->toArray();, 400);
} 

我的laravel版本是5.2,我无法理解这条规则。希望有人帮助我

3 个答案:

答案 0 :(得分:0)

尝试这样做:

$validator = Validator::make($request->all(),[
   'e_id'  =>  'required|unique:e_base,e_id,deleted_at,NULL'
]);

这将忽略具有值而不是NULL的deleted_at。

答案 1 :(得分:0)

你可以试试这个:

$validator = Validator::make($request->all(),[
        'e_id'  =>  'required|unique:e_base,e_id,NULL,e_id,deleted_at,NULL'
    ]);

这表示只有当deleted_at列等于null时才检查e_base表,并忽略e_id等于NULL的行(仅用于做类似模式)。有关更多信息,请访问此this

答案 2 :(得分:0)

我喜欢 Laravel 文档中提到的“Adding Additional Where Clauses”段落。

通过使用自定义查询逻辑,我们可以完全控制。否则,在添加简单的验证逻辑之前,我们必须考虑唯一规则的元素名称的位置。希望以下解决方案对其他人有用。

use Illuminate\Validation\Rule;

$validator = Validator::make($request->all(), [
    'name' => ['required', Rule::unique('e_base')->where(function ($query) {
            return $query->whereNull('deleted_at');
        })
    ],
]);