首页 > 解决方案 > 请求类:规则取决于元素的数量

问题描述

我正在使用请求类来验证表单,但我遇到了问题。看看这段代码

public function rules()
{
    return [
        'title' => 'required|string|between:6,50',
        'category_id' => 'required|integer|between:1,10'
    ];
}

它可以正常工作,但类别的数量会发生变化。如果我在控制器的方法中使用 validate 方法,我可以解决我的问题:

$count = Category::count();
$request->validate([
    'title' => 'required|string|between:6,50',
    'category_id' => 'required|integer|between:1,' . $count
]);

如何使用请求类解决我的问题?

标签: phplaravelvalidation

解决方案


您的验证目前没有多大意义,您正在验证数据库中可能存在或不存在的任意数字。

我将假设您只想接受数据库中存在的类别 ID,因此我将使用以下exists规则:

$request->validate([
    'title' => 'required|string|between:6,50',
    'category_id' => 'required|integer|exists:categories,id'
]);


文档

exists:table,column

验证中的字段必须存在于给定的数据库表中。


Exists 规则的基本用法

'state' => 'exists:states'

如果未指定列选项,则将使用字段名称。


指定自定义列名

'state' => 'exists:states,abbreviation'

推荐阅读