Подскажите, может быть есть решение где есть проверка на добавление дублей из формы?
например, рядом с кнопкой было бы написано "такая комбинация полей и данных уже есть, все равно добавить?"
Проверка на добавление дублей
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Проверка на добавление дублей
Думаю так.
1. Стандартная валидация на проверку уникальных значений + сценарий
2. Если есть, добавляете чекбокс, и если он проставлен, тогда присваиваете модели другой сценарий без валидации на уникальность
1. Стандартная валидация на проверку уникальных значений + сценарий
2. Если есть, добавляете чекбокс, и если он проставлен, тогда присваиваете модели другой сценарий без валидации на уникальность
Re: Проверка на добавление дублей
Или
Добавте поле в модель и выводите в hiddenInput, установив при создании записи false, если запись дублируется, не сохраняете, а устанавливаете в true и показываете форму еще раз с предупреждением. Если поле true, то просто сохраняете как обычно.
Добавте поле в модель и выводите в hiddenInput, установив при создании записи false, если запись дублируется, не сохраняете, а устанавливаете в true и показываете форму еще раз с предупреждением. Если поле true, то просто сохраняете как обычно.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
Re: Проверка на добавление дублей
Ок, спс. Хорошие советы.
Re: Проверка на добавление дублей
Предпочитаю делать всплывающее диалоговое окно на bootbox.js, с сообщением и несколькими кнопками. По кнопке "Показать дубликаты в новом окне" пользователь в новой закладке браузера может открывать GridView с уже установленными фильтрами для отображения записей-дубликатов. Просто его может заинтересовать что это за дубликат(ты), и ему не нужно будет их вручную искать. Для реализации этого дела использую отдельный метод для Ajax-валидации в контроллере, который умеет принимать параметр - требуется или нет проверка на дубликаты. При нажатии на Submit через отлов события 'beforeSubmit' дёргается валидатор в режиме с поиском дубликатов и в первую очередь проверяет на них. В ответ может вернуть (если есть дубликаты) собранный URL с параметрами для фильтров GridView. Если дубликатов не найдено, то продолжается обычная ajax-валидация формы и затем submit. По кнопке "Подтверждаю" в диалоговом окне пользователь подтверждает создание дубликата. В данном случае происходит ajaxSubmit формы, но режим поиска дубликатов уже не используется. Ну и кнопка "Отмена" для закрытия окна диалога и возврата к редактированию формы.
Re: Проверка на добавление дублей
для связи 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']],
];
}