Laravel 使用列名和筛选器检查存在性的自定义验证规则

Laravel 使用列名和筛选器检查存在性的自定义验证规则,laravel,validation,eloquent,laravel-5.4,Laravel,Validation,Eloquent,Laravel 5.4,我想验证用户是否在地址表单中选择了有效的状态值。为了简单起见,在开发过程中,我不会让他们选择国家 状态信息位于具有以下字段的表中: id country_id abbreviation name 表单使用一个名为address[state]的select元素,并发送状态ID作为所选值 我第一次尝试验证规则是: 'address.state' => [ 'required', Rule::exists('shop_address_states')->where(fun

我想验证用户是否在地址表单中选择了有效的状态值。为了简单起见,在开发过程中,我不会让他们选择国家

状态信息位于具有以下字段的表中:

id
country_id
abbreviation
name
表单使用一个名为
address[state]
的select元素,并发送状态ID作为所选值

我第一次尝试验证规则是:

'address.state' => [
    'required',
    Rule::exists('shop_address_states')->where(function ($query) {
        $query->where('country_id', 1);
    }),
],
但我得到一个
未知列“address.state”
错误

当我试图让它改用ID列时:

'address.state' => [
    'required',
    Rule::exists('shop_address_states,id')->where(function ($query) {
        $query->where('country_id', 1);
    }),
],
我得到一个
未定义的偏移量:1
错误

我想我有点把规则“state”=>“exists:states,缩写“”从哪里来,因为我在别处找不到一个例子


如何使用此规则?

如果不明确说明列名,Laravel将采用数据索引中的列名。在本例中,
address.state

当您尝试添加列名时,您并没有将其作为第二个参数传递。请尝试以下操作:

Rule::exists('shop_address_states', 'id')->where(function ($query) {
    $query->where('country_id', 1);
});

我认为Laravel将采用数据索引中的列名。在本例中,
address.state
。您是否尝试过显式传递列名<代码>规则::exists('shop\u address\u states','id')->其中(…请注意参数是两个独立的字符串。@fubar啊-我想这可能是我走错的地方-我尝试了规则::exists('shop\u address\u states,id'))-回答这个问题,今天晚些时候我会试试看。
地址的值是多少。说明
?它是
id
还是
缩写
?@Demonyowh
id
aha!在API中找到了它: