Laravel-验证数组输入请求数据在数据库中的唯一性

时间:2019-02-28 12:43:35

标签: php laravel

我在验证输入数组和使用unique:验证规则进行检查时遇到了麻烦,我希望有人可以进一步帮助我。

从视图中输入(多个):

<input type="text" class="form-control" name="contactNames[]" required>

我的dd($ request)的示例:

+request: ParameterBag {#44 ▼
    #parameters: array:6 [▼
        "_token" => "0WBYH4G4aB4XtkQ1Vx29cIvaH7SbYYVcXI6yOuNn"
        "name" => "Brand Name"
        "groupCheckbox" => array:3 [▶]
        "contactNames" => array:2 [▼
            0 => "Contact Name 1"
            1 => "Contact Name 2"
        ]
        "emails" => array:2 [▼
            0 => "test@test.com"
            1 => "test2@test.com"
        ]
        "contactNumbers" => array:2 [▼
            0 => "07777777777"
            1 => "07777777777"
        ]
    ]
}

并在我的控制器内进行验证:

$request->validate([
    'name' => 'required|string|max:255|unique:brands',
    'contactNames' => 'required|array',
    'contactNames.*' => 'required|max:255|string|distinct|unique:brand_managers',
    'emails' => 'required|array',
    'emails.*' => 'required|max:255|email|distinct|unique:brand_managers',
    'contactNumbers' => 'array',
    'contactNumbers.*' => 'numeric',
    'groupCheckbox' => 'required|min:1'
]);

我需要检查用户名是否唯一-如果我不使用unique:验证规则并且数据正确发布到我的数据库中,则验证工作正常,但是我不想使用多个品牌经理具有相同的详细信息,因此需要验证姓名和电子邮件地址的唯一性

我得到的错误是:

  

SQLSTATE [42S22]:找不到列:1054未知列   “ where子句”中的“ contactNames.0”(SQL:选择count(*)作为聚合   来自brand_managers,其中contactNames0 =联系人姓名1)

感谢您的预先帮助

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案-感谢您的帮助-将来可能遇到相同问题的其他人是我的解决方案:

$request->validate([
    'name' => 'required|string|max:255|unique:brands',
    'contactNames' => 'required|array',
    'contactNames.*' => ['required', 'max:255', 'string', 'distinct', Rule::unique('brand_managers', 'name')],
    'emails' => 'required|array',
    'emails.*' => ['required', 'max:255', 'email', 'distinct', Rule::unique('brand_managers', 'email')],
    'contactNumbers' => 'array',
    'contactNumbers.*' => 'numeric',
    'groupCheckbox' => 'required|min:1'
]);