PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, November 15, 2022

[FIXED] how to ignore array ID for validating array in Laravel?

 November 15, 2022     laravel, laravel-6, mysql, php     No comments   

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)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing