yii2 переопределяет find() для уникального валидатора

Я использую базовую модель для всех моделей, где я использую функцию логического удаления, переопределяющую функцию удаления по умолчанию, и в то же время я также переопределяю метод find(), чтобы отображались только те записи, которые логически не удалены. Теперь у меня есть правило в одной из моих моделей, чтобы проверить, взята ли уже комбинация двух значений или нет. Кажется, здесь также используется метод find(). Если комбинация уже есть, но логически удалена, я не получу сообщение об ошибке, что это уже было принято в прошлом. Потому что, если пользователь еще раз создаст запись с теми же значениями, я бы предпочел разблокировать ее (или удалить ее логическое удаленное состояние). Есть ли обходной путь для этого? Может со сценариями? Я понятия не имею, как я могу настроить метод find() для поиска не только логически не удаленных записей, но только при проверке на вставку. В противном случае мне пришлось бы удалить

...find()->where(['softDeleteTimestamp' => NULL])

из моей базовой модели и добавить во все поисковые модели, что было бы не очень приятно. Спасибо.


person user2511599    schedule 02.08.2015    source источник
comment
вы можете создать свой собственный валидатор   -  person Ngô Văn Thao    schedule 03.08.2015


Ответы (1)


Я думаю, вы можете использовать стандартный UniqueValidator следующим образом:

<?php
// a1 and a2 need to be unique together, only a1 will receive error message
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]

Если a1 является вашим уникальным полем, а a2 является флагом is_deleted, и перед проверкой вы устанавливаете флаг is_deleted в 0, уникальный валидатор ищет ваше уникальное поле и is_deleted=0, поэтому вы можете иметь такое же уникальное значение в базе данных, если оно мягкое удалены, и вы можете правильно удалить только одну запись без обратимого удаления.

person Zago    schedule 03.10.2015