Issue
That I want to make validation on an array value, and this is my code:
I have a function that can make a query to another table using hasMany but I want to validate that query must be unique. I tried to use this "required|unique:deed_legalization_numbers, number"
and that's work but when I tried to update/edit some field, it will return already taken.
Then i tried to make ignoring ID in unique:
"required|unique:deed_legalization_numbers, number, [$request->input('deed_legalization_numbers')]"
it will return array to string conversion, because not support array
Then I tried this code:
$deed_legalization_numbers = $request->input('deed_legalization_numbers.*.number');
$deed_legalization_id = $request->input('deed_legalization_numbers.*.id');
$rules = [
'deed_legalization_numbers.*.number' => //'required|unique:deed_legalization_numbers,number,deed_legalization_numbers.*.id',
[
'required',
Rule::unique('deed_legalization_numbers')->where(function ($query) use ($deed_legalization_numbers, $deed_legalization_id) {
return $query->whereIn('number', $deed_legalization_numbers);
})->ignore($deed_legalization_id[0]) // The problem in this line
],
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
I want to ignore that deed_legalization_numbers ID from checking, if i changed variable $deed_legalization_id[0]
to $deed_legalization_id
it will return error :
Status Code: 500 Internal Server Error
Symfony\Component\Debug\Exception\FatalErrorException: Method Illuminate\Validation\Rules\Unique::__toString() must not throw an exception, caught ErrorException: addslashes() expects parameter 1 to be string, array given in file ..path\vendor\laravel\framework\src\Illuminate\Validation\ValidationRuleParser.php on line 233
0 {main}
Solution
After searching so many threads, then I found the solution to my problem
So, I just change this
$deed_legalization_id = $request->input('deed_legalization_numbers.*.id');
$rules = [
'deed_legalization_numbers.*.number' => //'required|unique:deed_legalization_numbers,number',
[
'required',
'distinct',
Rule::unique('deed_legalization_numbers', 'number')->where(function ($query) use ($deed_legalization_id) {
$query->whereNotIn('id', $deed_legalization_id);
return $query;
})
],
];
$validator = Validator::make($request->all(), $rules, $message);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput();
}
And everything is just fine, no more duplicate column_number and must be unique
Answered By - vreedom18 Answer Checked By - Terry (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.