Laravel Как избежать дублирования данных по способу обновления - PullRequest
0 голосов
/ 06 августа 2020

Я работаю над laravel -приложением, в котором пользователи могут добавлять URL-адреса социальных сетей в свой профиль. Они выбирают сеть из раскрывающегося списка, скажем, Facebook, а затем вводят URL-адрес в другое поле ввода. Пока все хорошо, но оказывается, что когда пользователь, например, хочет отредактировать только URL-адрес, появляется ошибка, в которой говорится, что социальная сеть уже существует, например, что пользователь пытается ее дублировать. Сначала, когда изменился URL-адрес и в раскрывающемся списке была выбрана другая сеть, он работает. Я не знал об этой ошибке / проблеме и не могу понять, почему это происходит.

вот фрагмент кода из моего update() метода в Контроллере:

$query = DB::table("social_networks")
  ->where('social_networks.id', '=', request()->social_network_id)
  ->select('social_networks.name as social_network_name', 'social_networks.icon as social_network_icon')
  ->get()
  ->toArray();

  // Check if chosen social network
  // is Skype
  $result = array_filter($query, function ($item) {
    return ($item->social_network_name === 'skype');
  });

  // If chosen network is skype
  // do not check url for regex
  // else do check if regex is valid
  if (!empty($result)) {
    $validated = $request->validate([
      'url' => 'required|string',
      'social_network_id' => 'required'
    ], $errors);
  } else {
    $validated = $request->validate([
      'url' => ['required', 'regex:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/'],
      'social_network_id' => 'required'
    ], $errors);
  }

  $user_social_network = UserSocialNetwork::where(['id' => $id, "user_id" => $request->user()->id])->first();


  //HERE IT FAILS//
  if ($user_social_network->where(["social_network_id" => $validated["social_network_id"]])->first() == null) {
    $user_social_network->social_network_id = $validated["social_network_id"];
    $user_social_network->url = $validated["url"];
    $user_social_network->save();
  } else {
    return response(['errors' => ["social_network" => ["Social network already created."]]], 400);
  }

return response(['success' => true, "user_social_network" => $user_social_network], 201);

Пожалуйста помогите ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...