phpmysqllaravelcyberduck

Validate array if already exists in mysql php laravel


Currently I have set of array.

and

I can easily insert these data to my database using Laravel without doing any validations

here's the sample array

CODE:

        $excel1 = Importer::make('Excel');
        $excel1->hasHeader(true);
        $excel1->load($savePath.$fileName);
        $excel1->setSheet(2);
        $collection1 = $excel1->getCollection();
        $arr1 = json_decode($collection1,true);

    foreach ($arr1 as $row1) {
                $insert_data1[] = array(
                    'projCode'  =>  $projCode,
                    'emp_id'  =>  $row1['company_id'],
                    'type'  =>  'EMP',
                    'deleted'  =>  0,
                    'by_id'  => auth()->user()->id,
                    'updated_by'    =>  auth()->user()->name,
                    'created_at'    =>  now(),
                    'updated_at'    => now(),
                );
            }
  dd($insert_data1);

OUTPUT:

enter image description here

and I'm using this code to insert these data to my table

    DB::table('tbl_emp_proj')->insert($insert_data1);

and this works fine but the problem is,

I'm trying to validate if emp_id exists or not in my users table

Here's my users table

enter image description here

The value of emp_id from array should check if it already exists in my users using company_id field from users. How can I validate it if $insert_data1 is an array and should be check if it exists on database?

UPDATE

currently i have this validator and I tried to add up the $Insert_data1 but gives me undefined var for $insert_data1.

      $validator = Validator::make(
        [
            'file'      => $request->file,
            'extension' => strtolower($request->file->getClientOriginalExtension()),
        ],
        [
            'file'          => 'required|max:5000',
            'extension'      => 'required|in:,csv,xlsx,xls',
        ],
        $insert_data1,
        [
            '*.emp_id' => "required|exists:users,company_id",
        ]
    );

Solution

  • You can use Laravel Validator to validate any arrays as if its a request input.

    use Illuminate\Support\Facades\Validator;
    
    $validator = Validator::make(
        $insert_data1,
        [
            '*.emp_id' => "required|integer|exists:users,company_id",
        ]
    );
    

    EDIT:

    You can receive error messages and error items with the validator APIs.

    $failed = $validator->fails(); //boolean
    
    $errors = $validator->errors();
    
    $validated = $validator->validated();
    
    $invalid = $validator->invalid();