/** * @SWG\Post( * path="/mastoria", * operationId="addMastori", * tags={"mastoria"}, * description="Adds a new mastori in database", * produces={"application/json"}, * @SWG\Parameter( * name="body", * in="body", * required=true, * @SWG\Schema(ref="#/definitions/mastoriPost") * ), * @SWG\Response( * response=201, * description="Returns created Mastori object", * @SWG\Schema(ref="#/definitions/mastori") * ), * @SWG\Response( * response="400", * description="validation errors", * @SWG\Schema(ref="#/definitions/validationsErrorsModel") * ) * ) */ public function store(Request $request) { $data = $request->all(); $validator = $this->validator($data); if ($validator->fails()) { return response(['errors' => $validator->messages()], 400); } // store $mastori = new Mastori(); $user = new User(); $addresses = $data['addresses']; $professions = array_pluck($data['professions'], 'id'); $areas = isset($data['areas']) ? array_pluck($data['areas'], 'id') : []; $data = array_except($data, ['password_repeat', 'addresses', 'professions']); $userdata = array_only($data, ['email', 'username', 'password']); $mastoridata = array_except($data, ['email', 'username', 'password']); // Encrypt password $userdata['password'] = bcrypt($data['password']); $newMastori = $mastori->create($mastoridata); $newUser = $user->create($userdata); // Insert related addresses foreach ($addresses as $address) { $newUser->addresses()->create($address); } $newMastori->user()->save($newUser); // Sync professions $newMastori->professions()->sync($professions); //atach areas that mastori serves $newMastori->areas()->sync($areas); return response($newMastori->load('user')->load('professions')->load('areas'), 201); }