我想验证用户是否在地址表单中选择了有效的状态值。为了简化开发过程,我不会让他们选择这个国家。
状态信息位于包含以下字段的表中:
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);
}),
],
但我收到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
错误。
我想我有点抨击https://laravel.com/docs/5.4/validation#rule-exists中的'state' => 'exists:states,abbreviation'
规则,因为我还没有在其他地方找到一个例子。
如何让此规则生效?
答案 0 :(得分:3)
如果您没有明确说明列名,Laravel将假设数据索引中的列名。在这种情况下,address.state
。
当您尝试添加列名时,您并未将其作为第二个参数传递给它自己的权利。请尝试以下方法:
Rule::exists('shop_address_states', 'id')->where(function ($query) {
$query->where('country_id', 1);
});