Sead Lab
Sead Lab

Reputation: 211

Laravel Bulk Insert To Another Table From Selected Multiple Rows

I expected I can replicate multiple row from specific table to another table. But the problem, it cannot replicate password field data and spatie assignRole(). Whereas, all fields like email, name, username, etc are works properly.

public function approveMultiple(Request $request) {
        $get_ids = $request->ids;
        $ids = explode(',', $get_ids);

        $users = \App\Applicant::whereIn('id', $ids);
        $users->update(['status' => 'Approved']); 

        $find_selected = \App\Applicant::whereIn('id', $ids)->get();
        $find_selected->makeHidden(['status', 'id']);
        $find_selected->makeVisible(['password']);
        $new_users = $find_selected->toArray();
        $users = \App\User::insert($new_users);

        //problem still lays here
        //$users->assignRole('Applicant');
        //$users->save();

        return response()->json(['success' => "Selected User(s) successfully approved."]);
    }

Trying to this approach but only insert one record

public function approveMultiple(Request $request) {
        $get_ids = $request->ids;
        $ids = explode(',', $get_ids);

        //$users = \App\Applicant::whereIn('id', $ids);
        //$users->update(['status' => 'Approved']); 

        //$find_selected = \App\Applicant::whereIn('id', $ids)->get();
        $find_selected = \App\Applicant::whereIn('id', $ids)->firstOrFail();
        $find_selected->makeHidden(['status', 'id']);
        $find_selected->makeVisible(['password']);
        $new_users = $find_selected->toArray();
        //$users = \App\User::insert($new_users);


        $users = \App\User::create([
            'name' => $find_selected->name,
            'username' => $find_selected->username,
            'gender' => $find_selected->gender,
            'email' => $find_selected->email,
            'phone' => $find_selected->phone,
            'password' => $find_selected->password,
            'created_at' => $find_selected->created_at,
            'updated_at' => $find_selected->updated_at,
        ]);

        //problem lays here
        $users->assignRole('Applicant');
        $users->save();

        return response()->json(['success' => "Selected User(s) successfully approved."]);
    }

Upvotes: 0

Views: 1165

Answers (2)

A. El-zahaby
A. El-zahaby

Reputation: 1160

about password field , you need to make it visible with function like : makeVisible

for example:

$users->makeVisible('password')->toArray();

Edit 1:

about assignRole you must assign the role after you call the save() method

for example:

$users->password = $find_selected->password;
$users->save();
$users->assignRole('Applicant');

Edit 2:

public function approveMultiple(Request $request) {
        $get_ids = $request->ids;
        $ids = explode(',', $get_ids);

        //$users = \App\Applicant::whereIn('id', $ids);
        //$users->update(['status' => 'Approved']); 

        $find_selected = \App\Applicant::whereIn('id', $ids)->get();
        //$find_selected = \App\Applicant::whereIn('id', $ids)->firstOrFail();
        $find_selected->makeHidden(['status', 'id']);
        $find_selected->makeVisible(['password']);
        $new_users = $find_selected->toArray();
        //$users = \App\User::insert($new_users);

        foreach($find_selected as $new_users){
           $user = \App\User::create($new_users);
           $user->assignRole('Applicant');
        }

        return response()->json(['success' => "Selected User(s) successfully approved."]);
    }

Upvotes: 1

OMR
OMR

Reputation: 12188

i think the problem lays in this line:

$users = \App\User::insert($new_users);

insert method returns a boolean that indicate the insertion operation has succeeded or not ... so you $users variable will hold a boolean value ... and

$users->assignRole('Applicant');
 $users->password = $find_selected->password;

wont work

you could use :

$find_selected->makeVisible(['password']);

foreach($find_selected as $user)
{
$newUser= new User();
$newUser->password = $user->password;
$newUser->save();
$newUser->assignRole('Applicant');
}

Upvotes: 0

Related Questions