Как проверить с помощью validate, существует ли значение для каждого пользователя, что оно содержится только один раз? - PullRequest
0 голосов
/ 14 июня 2019

Я создаю сайт кафе, потому что хочу изучать Laravel, и мне нравится кофе.У меня есть панель инструментов, где пользователь может управлять своим кофе.Он может вручную выбирать из всех видов кофе.С моим подходом я обнаружил 2 основных проблемы, которые связаны с вопросом.

1.Задача

Допустим, пользователь добавил 2 кофе с идентификатором 1 и 2

id  |  user_id  |  selected_coffee  |  created_at  |  updated_at
----------------------------------------------------------------
1   |  1        |  1                |  xxxxxxxxxx  |  xxxxxxxxxx
1   |  1        |  2                |  xxxxxxxxxx  |  xxxxxxxxxx

Если пользователь выбирает в этих заказах, потому что он может выбрать несколько.* Допустим, он выбрал идентификатор кофе 1, 2 и последний 3. *

Поскольку код обнаруживает, что первый идентификатор находится в базе данных, онигнорирует другие значения.

2.Проблема

Допустим, пользователь1 добавил 2 кофе с идентификатором 1 и 2

id  |  user_id  |  selected_coffee  |  created_at  |  updated_at
----------------------------------------------------------------
1   |  1        |  1                |  xxxxxxxxxx  |  xxxxxxxxxx
1   |  1        |  2                |  xxxxxxxxxx  |  xxxxxxxxxx

Пользователь2 может выбрать кофе, но это не такнаписано в базе данных, которая мне нужна для визуального отображения на веб-интерфейсе

Я знаю, что это плохо видно, чтобы добавить 2 проблемы, но я думаю, если мы сможем исправить номер 1. Проблематогда проблема 2. исчезнет.

Вот мой код, который делает его уникальным:

public function store(Request $request)
{
  app('App\Http\Controllers\ScoreController')->store($request);

  $message = ['selected_coffee.unique' => 'Check Coffee ID already exist'];
  $this->validate($request,[
    'selected_coffee' => 'unique:manage_coffees',
  ],$message);


  if($request->input('checkedDrink') != null){

    foreach ($request->input('checkedDrink') as $selected_id) {

      $manage_coffee = new ManageCoffee();

      $manage_coffee->user_id = \Auth::user()->id;

      $manage_coffee->selected_coffee = (int)$selected_id;

      $manage_coffee->save();

    }
  }

  return redirect('dashboard/coffee');
}

Я нашел валидатор в StackOverflow, но он не был хорошо объяснен,Я думаю, что я должен сделать предложение where в -> validate , но я не знаю, куда мне его поместить.

Надеюсь, вы, ребята, сможете мне помочь.

Торстен

1 Ответ

0 голосов
/ 14 июня 2019

Если я правильно понял, вам нужно существующее правило , но с дополнительным условием, как в примере из официальных документов.

Примерно так:

use Illuminate\Validation\Rule;

$this->validate($request,[
   'selected_coffee' => [
       Rule::exists('manage_coffees')->where(function ($query) {
           $query->where('user_id', Auth::user()->id);
           //you can specify any conditions you like
       }),
   ],
],$message);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...