yii2 覆盖唯一验证器的 find()
yii2 override find() for unique validator
我正在为所有模型使用一个基本模型,我正在使用一个逻辑删除函数来覆盖默认删除函数,同时我也在覆盖 find() 方法,只显示记录逻辑上不会被删除。
现在我在我的一个模型中有一个规则,用于检查这两个值的组合是否已经被采用。似乎这也使用了 find() 方法。如果已经有组合,但逻辑上已删除,我将不会收到错误消息,指出这已在过去进行。因为如果用户再次创建具有相同值的记录,我宁愿解锁它(或删除它的逻辑删除状态)。有解决方法吗?也许有场景?我不知道如何进一步自定义 find() 方法以不仅搜索逻辑上未删除的记录,而且仅在验证插入时搜索。否则我将不得不删除
...find()->where(['softDeleteTimestamp' => NULL])
从我的基本模型并将其添加到所有搜索模型,这不是很好。谢谢
我想你可以这样使用标准的 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,所以你可以在数据库中有相同的唯一值,如果被软删除,你可以正确地只有一个记录没有被软删除。
我正在为所有模型使用一个基本模型,我正在使用一个逻辑删除函数来覆盖默认删除函数,同时我也在覆盖 find() 方法,只显示记录逻辑上不会被删除。 现在我在我的一个模型中有一个规则,用于检查这两个值的组合是否已经被采用。似乎这也使用了 find() 方法。如果已经有组合,但逻辑上已删除,我将不会收到错误消息,指出这已在过去进行。因为如果用户再次创建具有相同值的记录,我宁愿解锁它(或删除它的逻辑删除状态)。有解决方法吗?也许有场景?我不知道如何进一步自定义 find() 方法以不仅搜索逻辑上未删除的记录,而且仅在验证插入时搜索。否则我将不得不删除
...find()->where(['softDeleteTimestamp' => NULL])
从我的基本模型并将其添加到所有搜索模型,这不是很好。谢谢
我想你可以这样使用标准的 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,所以你可以在数据库中有相同的唯一值,如果被软删除,你可以正确地只有一个记录没有被软删除。