laravel validation, Rule::exists or Rule::in



我想验证项目序列。在我的想法中,序列字段必须存在于数据库序列列中,或者必须比当前序列的最大值多一加。我有这个代码在视图中:

<select id="sequence" name="sequence" value="{{ old('sequence') }}">
@foreach ($items = AppModelsItem::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>

现在我在控制器中验证请求("序列"(时遇到问题。我正在寻找一些类似的代码

Rule::exists('items', 'sequence') OR equal => ($items->max('sequence') + 1)

注意:当值不是最大值加一时,我有一个更新序列的函数。

您可以使用Rule::when()进行验证。

use AppModelsItem;
$max = Item::max('sequence');

控制器

$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'])],
]; 
}

相关内容

  • 没有找到相关文章

最新更新