#arrays #json #laravel
#массивы #json #laravel
Вопрос:
Я пытаюсь разбить мой запрос тела от postman с 1 объекта на несколько объектов, в настоящее время мой Json выглядит следующим образом:
{
"email": "shahzad@ovadamd.com",
"password": "admin123",
"password_confirmation": "admin123",
"status": 0,
"first_name": "Shahzad",
"middle_name": "Hussain",
"last_name": "Shah",
"date_of_birth": "2015-01-01",
"gender": "M",
"area_id": 1,
"address": "Minhatten NY",
"city": "New York",
"state": "Washington",
"zip": "12312",
"fax": "111-111-1111",
"phone_extension": "2471",
"work_phone": "111-111-1111",
"phone_no": "111-111-1111",
"emergency_contact": "111-111-1111",
"social_security": "111-11-1111",
"module_id": 1,
"role_id": 1,
"speciality_id": 1,
"facility_id": 1,
"priv_title": "can edit doctor",
"priv_key": "ced",
"display_group": "Doctor",
"prev_id" :1
}
и я хочу разделить этот json дальше, как показано ниже.
{
"user_profile": {
"email": "shahzadg@ovadamd.com",
"password": "admin123",
"password_confirmation": "admin123",
"status": 0,
"first_name": "Shahzad",
"middle_name": "Hussain",
"last_name": "Shah",
"date_of_birth": "2015-01-01",
"gender": "M",
"area_id": 1,
"address": "Minhatten NY",
"city": "New York",
"state": "Washington",
"zip": "12312",
"fax": "111-111-1111",
"phone_extension": "2471",
"work_phone": "111-111-1111",
"phone_no": "111-111-1111",
"emergency_contact": "111-111-1111",
"social_security": "111-11-1111",
"module_id": 2,
"role_id": 1
},
"prev":{
"speciality_id": 1,
"facility_id": 1,
"priv_title": "can edit doctor",
"priv_key": "ced",
"display_group": "Doctor",
"prev_id" :1
}
}
и в моем контроллере я создал переменную user_profile и prev, а затем я объединяю:
public function register(Request $request) {
$body = $request->all();
$userProfile = $body['user_profile'];
$userPrev = $body['prev'];
$bodyObj = array_merge($userProfile, $userPrev);
$bodyObj['token'] = $body['token'];
$validator = UserValidations::validateUser($bodyObj);
if ($validator->fails()) {
return response([
'status' => false,
'message' => __('messages.validation_errors'),
'errors' => $validator->errors()->all()
], 200);
}
но он говорит, что невозможно добавить или обновить дочернюю строку, но нет ничего об этой ошибке, когда я удаляю array_merge и удаляю объект json в простой объект, он работает нормально, я не знаю, в чем проблема, я застрял в этой проблеме.
Здесь нужна ваша помощь
array:3 [
"user_profile" => array:22 [
"email" => "shahzadshahg@hotmail.com"
"password" => "admin123"
"password_confirmation" => "admin123"
"status" => 0
"first_name" => "Shahzad"
"middle_name" => "Hussain"
"last_name" => "Shah"
"date_of_birth" => "2015-01-01"
"gender" => "M"
"area_id" => 1
"address" => "Minhatten NY"
"city" => "New York"
"state" => "Washington"
"zip" => "12312"
"fax" => "111-111-1111"
"phone_extension" => "2471"
"work_phone" => "111-111-1111"
"phone_no" => "111-111-1111"
"emergency_contact" => "111-111-1111"
"social_security" => "111-11-1111"
"module_id" => 2
"role_id" => 2
]
"prev" => array:6 [
"speciality_id" => 1
"facility_id" => 1
"priv_title" => "can edit doctor"
"priv_key" => "ced"
"display_group" => "Doctor"
"prev_id" => 1
]
"token" => "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3RcL2ZlYXR1cmUtbWFzdGVyXC9hcGlcL2ZkX2xvZ2luIiwiaWF0IjoxNTU0MDMzNTI4LCJleHAiOjE1ODU1Njk1MjgsIm5iZiI6MTU1NDAzMzUyOCwianRpIjoiaXQyZm1KdmpmeWNOMXJwbyIsInN1YiI6MiwicHJ2IjoiNGFjMDVjMGY4YWMwOGYzNjRjYjRkMDNmYjhlMWY2MzFmZWMzMjJlOCIsImFjY2Vzc19tb2R1bGUiOiJmcm9udC1kZXNrIiwibW9kdWxlX2lkIjoyLCJ1c2VyX2lkIjoyfQ.nJXJapamtghGZZ_LZZlZLTE64Bs_ckQoWKanXNMD4Nc"
]
public function register(Request $request) {
$body = $request->all();
$userProfile = $body['user_profile'];
$userPrev = $body['prev'];
$bodyObj = array_merge($userProfile, $userPrev);
$bodyObj['token'] = $body['token'];
return response()->json($bodyObj);
DB::beginTransaction();
try{
$token = JWTAuth::getToken();
$apy = JWTAuth::getPayload($token)->toArray();
$request->merge(['module_id' => $apy['module_id']]);
$request->request->add(['created_by' => Auth::user()->id]);
$request->merge(['password' => bcrypt($request->input('password'))]);
$user = $this->user->create($request->only($this->user->getModel()->fillable));
$request->request->add(['user_id' => $user->id]);
$this->userBasicInfo->create($request->only($this->userBasicInfo->getModel()->fillable));
$this->userContactDetails->create($request->only($this->userContactDetails->getModel()->fillable));
$this->userAccessModule->create($request->only($this->userAccessModule->getModel()->fillable));
$this->userRoles->create($request->only($this->userRoles->getModel()->fillable));
$this->verifyUser->create(['user_id' => $user->id, 'token' => str_random(40)]);
Mail::to($user->email)->send(new VerifyMail($user));
DB::commit();
return response([
'status' => true,
'message' => 'User registered successfully',
], 200);
} catch(Exception $ex) {
DB::rollback();
return response([
'status' => false,
'message' => __('messages.validation_errors'),
'errors' => $ex->getMessage(),
], 500);
}
}
Ответ №1:
public function register(Request $request) {
$body = $request->all();
$userProfile = $body['user_profile'];
$userPrev = $body['prev'];
$bodyObj = array_merge($userProfile, $userPrev);
$bodyObj['token'] = $body['token'];
return response()->json($bodyObj);
// $validator = UserValidations::validateUser($bodyObj);
// if ($validator->fails()) {
// return response([
// 'status' => false,
// 'message' => __('messages.validation_errors'),
// 'errors' => $validator->errors()->all()
// ], 200);
// }
}
array_merge
Функция работает нормально
Ваш код (я прокомментировал несколько строк)
Комментарии:
1. Комментарии не предназначены для расширенного обсуждения или сеансов отладки. Если вы хотите уточнить свой вопрос или ответ, пожалуйста, отредактируйте. Если у вас есть дополнительный вопрос, пожалуйста, задайте новый вопрос.