Laravel foreach l oop умножает записи базы данных на количество входов - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь сохранить несколько app_users и team_members из одного app_user_id. Все работает отлично, но app_user_number сохраняет одну и ту же запись трижды, т.е. одну и ту же запись для всех app_users. Если я возьму «appUsers-> save ();» внутри третьего foreach l oop, то получу 9 записей для трех входов, т. Е. Записи умножаются на количество входов, но тогда app_user_nummber отлично работает. Пожалуйста, помогите мне установить правильный foreach l oop, чтобы записи не повторялись.

$input = json_decode(file_get_contents('php://input', true));

$appUserId = $input->app_user_id;

$team = new Team();
$team->app_user_id = $appUserId;
$team->save();

foreach($input->users as $obj){

  foreach($obj->app_user_name as $appUserName){

    foreach($obj->app_user_number as $appUserNumber) {

      $appUser = new AppUser();
      $appUser->app_user_full_name = $appUserName;
      $appUser->app_user_mobile_number = $appUserNumber;
      $appUser->app_user_stage_name = 0;
      $appUser->app_user_designation_id = 0;
      $appUser->app_user_dob = '1000-01-01 00:00:00';
      $appUser->app_user_gender = 0;
      $appUser->app_user_year_experience = 0;
      $appUser->app_user_project_experience = 0;
      $appUser->app_user_genre_specialisation = 0;
      $appUser->app_user_languages_worked_in = 0;
      $appUser->app_user_project_expectation = 0;
      $appUser->app_user_skills = 0;
      $appUser->app_user_profile_photo_url = 0;
      $appUser->app_user_aadhar_card_front_photo_url = 0;
      $appUser->app_user_aadhar_card_back_photo_url = 0;
      $appUser->app_user_industry_card_front_photo_url = 0;
      $appUser->app_user_industry_card_back_photo_url = 0;
      $appUser->app_user_company_card_front_photo_url = 0;
      $appUser->app_user_company_card_back_photo_url = 0;
      $appUser->app_user_left_shot_photo_url = 0;
      $appUser->app_user_right_shot_photo_url = 0;
      $appUser->app_user_is_verified = 0;
      $appUser->app_user_rating = 0;
      $appUser->app_user_email_id = 0;
    }
    $appUser->save();
    $teamMembers = new TeamMembers();
    $teamMembers->team_id = $team->team_id;
    $teamMembers->app_user_id = $appUser->app_user_id;
    $teamMembers->save();
  }
}

$response = json_encode(array("response_code"=>200, "response_message"=>"Success"));
return $response;

Ввод json:

{
   "app_user_id" : "1",
   "users" : [{
     "app_user_name" : ["Harry", "Hodor", "Hillary"],
     "app_user_number" : ["2", "3", "4"]
   }]
}

1 Ответ

0 голосов
/ 16 апреля 2020

чтобы достичь того, что вам нужно, при условии, что порядок имен совпадает с порядком чисел, вам нужно только l oop для любого из них, но получить ключ $, чтобы вы могли также получить доступ к другому массиву:

foreach($input->users as $obj){
  foreach($obj->app_user_name as $key=>$appUserName){
      $appUser = new AppUser();
      $appUser->app_user_full_name = $appUserName;
      $appUser->app_user_mobile_number = $obj['app_user_number'][$key];
      $appUser->app_user_stage_name = 0;
      ...
      $appUser->app_user_email_id = 0;
      $appUser->save();
      $teamMembers = new TeamMembers();
      $teamMembers->team_id = $team->team_id;
      $teamMembers->app_user_id = $appUser->app_user_id;
      $teamMembers->save();
  }
}

лучшим подходом может быть реструктуризация входного массива, он может стать

   "users" : [{
     "app_user_name" : "Harry",
     "app_user_number" : 2
   },{
     "app_user_name" : "Hodor",
     "app_user_number" : 3
   },{
     "app_user_name" : "Hillary",
     "app_user_number" : 4
   }]

, и вы можете l oop вот так

foreach($input->users as $key=>$val){
  $appUser = new AppUser();
  $appUser->app_user_full_name = $val->app_user_name;
  $appUser->app_user_mobile_number = $val->app_user_number;
  $appUser->app_user_stage_name = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...