Laravel Nova条件验证:required_if +存在规则

问题描述 投票:0回答:1

我正在尝试验证有关'parent_code'字段值的'level' attr

这是我想要实现的目标:

['parent_code'仅必需,当'level'为!= 0(此部分工作正常)]

并且在设置时,它还必须存在于表'products'中('product_code':将使用的列名)

我当前的代码(无法正常工作)

产品资源类别

public function fields(Request $request) {
        return [
            ID::make()->sortable(),

            Text::make('Product code', 'product_code')
                ->rules('required')
                ->creationRules('unique:products,product_code')
                ->updateRules('unique:products,product_code,{{resourceId}}')->hideFromIndex(),


            Text::make('Product short name', 'product_short_name')->onlyOnForms(), 


            Textarea::make('Product name', 'product_name')
                ->rules('required')
                ->sortable()
                ->onlyOnForms(),

            Text::make('Parent code', 'parent_code')
                ->rules(['required_if:level,2,4,6', 'exists:products,product_code'])
                ->hideFromIndex(), 

            Select::make('Level', 'level')->options([
                '0' => 'Sector level',
                '2' => 'H2',
                '4' => 'H4',
                '6' => 'H6',
            ])->rules('required')->sortable(),    

        ];
}

创建产品表格

Create product form

谢谢您的帮助。

php laravel laravel-validation laravel-nova
1个回答
0
投票

尝试使用规则数组本身中的if条件。在下面显示演示代码。使代码符合您的要求。

public function fields(Request $request) {
    $validationArr = [
        ID::make()->sortable(),

        Text::make('Product code', 'product_code')
            ->rules('required')
            ->creationRules('unique:products,product_code')
            ->updateRules('unique:products,product_code,{{resourceId}}')->hideFromIndex(),


        Text::make('Product short name', 'product_short_name')->onlyOnForms(), 


        Textarea::make('Product name', 'product_name')
            ->rules('required')
            ->sortable()
            ->onlyOnForms(),


        if($this->input('level') == 2 || $this->input('level') == 4 || $this->input('level') == 6) {
            Text::make('Parent code', 'parent_code')
                ->rules(['exists:products,product_code'])
                ->hideFromIndex();
        }

        Select::make('Level', 'level')->options([
            '0' => 'Sector level',
            '2' => 'H2',
            '4' => 'H4',
            '6' => 'H6',
        ])->rules('required')->sortable(),    

    ];

    return $validationArr;
}
© www.soinside.com 2019 - 2024. All rights reserved.