Reputation: 211
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
Reputation: 1160
about password field , you need to make it visible with function like : makeVisible
for example:
$users->makeVisible('password')->toArray();
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');
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
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