[英]laravel validation, Rule::exists or Rule::in
我想验证项目序列。 在我的想法中,序列字段必须存在于数据库序列列中,或者必须比当前序列的最大值大一加。 我有这段代码:
<select id="sequence" name="sequence" value="{{ old('sequence') }}">
@foreach ($items = App\Models\Item::all()->sortBy('sequence') as $item)
<option value="{{ $item->sequence }}">{{ $item->sequence }}</option>
@endforeach
<option value="{{ $items->max('sequence') + 1 }}">{{ $items->max('sequence') + 1 }}</option>
</select>
现在我在验证 controller 中的请求(“序列”)时遇到问题。 我正在寻找这样的代码
Rule::exists('items', 'sequence') OR equal => ($items->max('sequence') + 1)
注意:当值不是最大值加一时,我有一个 function 用于更新序列。
您可以使用Rule::when()
进行验证。
use App\Models\Item;
$max = Item::max('sequence');
Controller
$validatedData = $request->validate([
'sequence' => ['required', 'integer', Rule::when($request->sequence != $max + 1, ['exists:items,sequence'])],
]);
或者,
表单请求
public function rules()
{
return [
'sequence' => ['required', 'integer', Rule::when($this->sequence != $max + 1, ['exists:items,sequence'])],
];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.