繁体   English   中英

laravel 验证,Rule::exists 或 Rule::in

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM