Проверка на добавление дублей

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Проверка на добавление дублей

Сообщение iamguruman »

Подскажите, может быть есть решение где есть проверка на добавление дублей из формы?

например, рядом с кнопкой было бы написано "такая комбинация полей и данных уже есть, все равно добавить?"
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Проверка на добавление дублей

Сообщение Loveorigami »

Думаю так.
1. Стандартная валидация на проверку уникальных значений + сценарий
2. Если есть, добавляете чекбокс, и если он проставлен, тогда присваиваете модели другой сценарий без валидации на уникальность
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Проверка на добавление дублей

Сообщение someweb »

Или
Добавте поле в модель и выводите в hiddenInput, установив при создании записи false, если запись дублируется, не сохраняете, а устанавливаете в true и показываете форму еще раз с предупреждением. Если поле true, то просто сохраняете как обычно.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: Проверка на добавление дублей

Сообщение iamguruman »

Ок, спс. Хорошие советы.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Проверка на добавление дублей

Сообщение Alexum »

Предпочитаю делать всплывающее диалоговое окно на bootbox.js, с сообщением и несколькими кнопками. По кнопке "Показать дубликаты в новом окне" пользователь в новой закладке браузера может открывать GridView с уже установленными фильтрами для отображения записей-дубликатов. Просто его может заинтересовать что это за дубликат(ты), и ему не нужно будет их вручную искать. Для реализации этого дела использую отдельный метод для Ajax-валидации в контроллере, который умеет принимать параметр - требуется или нет проверка на дубликаты. При нажатии на Submit через отлов события 'beforeSubmit' дёргается валидатор в режиме с поиском дубликатов и в первую очередь проверяет на них. В ответ может вернуть (если есть дубликаты) собранный URL с параметрами для фильтров GridView. Если дубликатов не найдено, то продолжается обычная ajax-валидация формы и затем submit. По кнопке "Подтверждаю" в диалоговом окне пользователь подтверждает создание дубликата. В данном случае происходит ajaxSubmit формы, но режим поиска дубликатов уже не используется. Ну и кнопка "Отмена" для закрытия окна диалога и возврата к редактированию формы.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Проверка на добавление дублей

Сообщение andku83 »

для связи many-to-many может подойти такой вариант

Код: Выделить всё

    public function rules()
    {
        return [
        ...
            [['category_id', 'brand_id'], 'unique', 'targetAttribute' => ['category_id', 'brand_id']],
            [['brand_id'], 'exist', 'skipOnError' => true, 'targetClass' => Brand::class, 'targetAttribute' => ['brand_id' => 'id']],
            [['category_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::class, 'targetAttribute' => ['category_id' => 'id']],
        ];
    }
Ответить