Как проверить наличие имени категории и родительского идентификатора в базе данных с помощью PHP? - PullRequest
0 голосов
/ 23 сентября 2018

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

Таким образом, в основном, параметры, полученные из формы:

  1. Название категории
  2. Слаг категории
  3. Родительский идентификатор уже существующей категории
  4. Описание категории

Мне нужнопроверить, существует ли уже категория с таким же

  1. именем категории
  2. Родительский идентификатор

Я уже написал для нее функцию, но онапохоже, не работает.

foreach(Category::all() as $c) {
        if($c->name === $request->name) {
            if($c->parent_id === $request->parent_id) {
                return redirect(route('admin.products.categories'))->with([
                    'error' => 'A term with the name provided already exists.'
                ]);
            } else {
                break;
            }
        }  else {
            break;
        }
    }

Я новичок в Laravel и PHP, поэтому я думаю, что у меня возникают проблемы с правильным выходом из цикла foreach.

Благодарю за помощьи, пожалуйста, не будьте жестоким с вашим ответом, если вы найдете такой же вопрос, как мой, здесь, в переполнении стека.Я не смог найти ни одного.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

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

$validator = Validator::make($request->all(), [
    'name' => 'required|unique:categories:name',
    'slug' => 'required|unique:categories:slug',
    'parent_id' => 'required|unique:categories:parent_id',
]);

Уникальное правило принимает в качестве параметров имя таблицы и столбец, для которогочтобы проверить unique:table_name:column_name

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

if ($validator->fails()) {
    return redirect(route('admin.products.categories'))->with([
        'error' => 'A term with the name provided already exists.'
    ]);

    // Or you can pass the validator to 
    return redirect(route('admin.products.categories'))
                ->withErrors($validator)
                ->with('error' => 'A term with the name provided already exists.')
                ->withInput();
}

при переходе к withErrors the $validator это позволит вам получить доступ ко всем ошибкам, исходящим от вашего валидатора

0 голосов
/ 23 сентября 2018

Вы можете сделать это легко, попробуйте:

if(Category::where('name', $request->name)->where('parent_id', $request->parent_id)->get())
{
   return redirect(route('admin.products.categories'))->with([
     'error' => 'A term with the name provided already exists.'
   ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...