Laravel возвращает значение, если оно не уникально

#php #laravel #laravel-5 #laravel-5.2 #laravel-5.1

#php #laravel #laravel-5 #laravel-5.2 #laravel-5.1

Вопрос:

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

  public function store(Request $request)
        {
            $select = 'select';

            //logged in user id
            $userid         = Auth::user() -> id;
            $usercountry    = Auth::user() -> country;

            $this -> validate($request, array(
                'number'        => 'required | unique:leads',
                'website'       => 'required | unique:leads',
                'lead_source'   => 'required | not_in:' . $select,
                'industry'      => 'required | not_in:' . $select,
                'action'        => 'required | not_in:' . $select
            ));
}
  

Это работает идеально, но показывает мне сообщение, сообщающее мне, дублируется ли ввод веб-сайта или нет.

То, что я пытаюсь сделать, это вернуть значение из таблицы, которая содержит столбец website.

Я нашел этот код:

 if ($validator->fails()) {
            $failedRules = $validator->failed();

        }
  

Как я мог бы изменить его, чтобы возвращать значение из той же дублированной строки в таблице лидов?

Комментарии:

1. Почему бы не написать собственное правило проверки, которое делает это?

2. Нужно ли мне писать запрос, который возвращает значение из таблицы, когда оно дублируется, или есть лучший способ?

3. Да, просто верните значение как ошибку.

Ответ №1:

Может быть, что-то подобное сработает для вас

             $rules = [
                'number'        => 'required | unique:leads',
                'website'       => 'required | unique:leads',
                'lead_source'   => 'required | not_in:' . $select,
                'industry'      => 'required | not_in:' . $select,
                'action'        => 'required | not_in:' . $select
            ];

            $data = [
                'number.required' => 'number is required.',
                'number.unique' => 'number has already been taken',
                ....
            ];

            $validate = Validator::make($request->all(),$rules,$data);

            if($validate->fails())
            {
                return redirect()->back()->withErrors($validate->errors())->withInput();
            }
  

Комментарии:

1. да, но как я возвращаю значение из столбца.. Нужно ли мне писать для него запрос? Я имею в виду, это эффективно или есть лучший способ?

2. Да, я думаю, вам нужно написать запрос, и результат передается в $data[] с конкретным сообщением.

3. @Frank Все эффективно, если у вас нет 100 тыс. пользователей, и к тому времени у вас будет команда людей, кодирующих ваше приложение, которые знают, что происходит. И да, вам нужно сделать для него дополнительный запрос (select).