我使用的是Laravel 7. 比方说我有这样的颜色下拉。黄色, 蓝色, 橙色, 黑色等等 这些颜色没有存储在数据库中.
在表单中我有最喜欢的颜色和最不喜欢的颜色, 每个字段可以选择1种以上的颜色. 即:我最喜欢的颜色可以是蓝色和黄色,我最不喜欢的颜色可以是黑色。这两个字段都是数组字段(favorite_colors[], least_favorite_colors[])
在我的laravel验证中, 我想确保颜色不能同时包含在最喜欢的颜色和最不喜欢的颜色中. 譬如, 如果我把蓝色作为我最喜欢的颜色, 那么蓝色就不能出现在我最不喜欢的颜色列表中.
我已经尝试过了。
[...
'favorite_colors' => 'required|array',
'favorite_colors.*' => 'required|different:least_favorite_colors.*', /*not working */
...]
但没有用
好像是not in验证规则的一个用例。
not_in:foo,bar,...。 被验证的字段必须不包含在给定的值列表中。规则::notIn方法可以用来流畅地构造规则:...。
所以你应该检查最喜欢的颜色数组中的每个值是否不在最不喜欢的颜色数组中。
[...
'favorite_colors' => 'required|array|distinct',
'favorite_colors.*' => 'required|notIn::{$this->input("least_favorite_colors")}'
Different是用来比较一个字段和另一个字段。要使用 different,你必须在某种循环中检查每个最不喜欢的颜色。
谢谢@Haze的意见,正确的使用方法是。
use Illuminate\Validation\Rule;
和这样的验证。
'favorite_colors.*' => ['required', Rule::notIn($request->post('least_favorite_colors'))],
如果使用
'favorite_colors.*' => 'required|different:least_favorite_colors.*',
它只会比较最喜欢的颜色数组0和最不喜欢的颜色数组0,数组1和数组1等。