yii2覆盖唯一验证器

时间:2015-08-02 11:22:43

标签: yii2 unique soft-delete validationrules

我在所有模型中使用基本模型,我使用逻辑删除功能覆盖默认删除功能,同时我也覆盖了find()方法,仅显示逻辑上未删除的记录。 现在我在我的一个模型中有一个规则,检查两个值的组合是否已经被采用。似乎这也使用了find()方法。如果已经有一个组合,但在逻辑上已删除,我不会收到过去已经采用的错误消息。因为如果用户再次使用相同的值创建记录,我宁愿解锁它(或删除它的逻辑删除状态)。这有解决方法吗?也许有场景?我不知道如何进一步自定义find()方法,以便仅在验证插入时搜索逻辑上未删除的记录。否则我将不得不删除

...find()->where(['softDeleteTimestamp' => NULL])
从我的基础模型

并将其添加到所有搜索模型,什么不是很好。感谢。

1 个答案:

答案 0 :(得分:0)

我认为你可以这样使用标准的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,因此您可以在数据库中具有相同的唯一值如果被软删除,并且您可以正确地只有一个记录未被软删除。