我想验证用户在地址表单中选择了有效的状态值。为了简单起见,我不会让他们选择国家。自定义验证规则检查是否存在列名和过滤器
状态信息是表具有以下字段:
id
country_id
abbreviation
name
的形式使用选择元件与名称address[state]
并发送状态ID作为选择的值。
我第一次尝试在验证规则是:
'address.state' => [
'required',
Rule::exists('shop_address_states')->where(function ($query) {
$query->where('country_id', 1);
}),
],
但我得到一个Unknown column 'address.state'
错误。
当我试图得到它使用的ID列,而不是:
'address.state' => [
'required',
Rule::exists('shop_address_states,id')->where(function ($query) {
$query->where('country_id', 1);
}),
],
我得到一个undefined offset: 1
错误。
我想我是一种混合规则'state' => 'exists:states,abbreviation'
https://laravel.com/docs/5.4/validation#rule-exists因为我还没有能够找到其他地方的例子。
我该如何得到这个规则的工作?
我认为Laravel将从数据索引承担列名称。在这种情况下,'address.state'。你有没有尝试显式传递列名? 'Rule :: exists('shop_address_states','id') - > where(...'注意参数是两个单独的字符串 – fubar
@fubar啊 - 我想这可能是我错过的地方 - 我试过Rule: :exists('shop_address_states,id') - 让它成为一个答案,我可以尝试,当我可以在今天晚些时候 – HorusKol
嗨那里..“address.state”的价值是什么?它是'id'还是'缩写'? – Demonyowh