2022-03-23 18:00:08 1351次浏览 1条回答 0 悬赏 50 金钱

一般用类似这种 ['a1', 'unique'] 来验证唯一性。但是表里有个 del 字段,删除的时候不是真的删除,而是把 del 字段置为 1。我要验证 a1 在 del 字段为0时的唯一性,怎么验证?

最佳答案

  • 蓝色主旋律 发布于 2022-03-24 14:06 举报

    使用 when,

    [
        'a1',
        'unique',
        'when' => function($model) {
            return 0 == $model->del;
        },
        'message' => '[错误提示信息]'
    ]
    
    4 条回复
    回复于 2022-03-24 16:59 回复

    如果我自己写了一个函数比如 foo,如果返回值为true就验证通过,如果为false就验证不通过,应该怎么写?

    回复于 2022-03-25 09:03 回复

    ['a1', 'someFunc'];
    
    public function someFunc ($attribute, $params)
    {
    	if(  0 == $this->del;)
    	{
    		$this->addError($attribute, 'error message');
    	}
    }
    
    回复于 2022-04-13 10:38 回复


    那个使用when的还是有点问题,好像只能判断要验证的model的del为1就不验证,但是如果其它的del为1照样验证。比如数据库中有一条记录 “a1=>1,del=>1”,我又插入一条记录“a1=>1,del=>0”,按照道理来说应该可以插入进去,因为前面一条记录删除了,但是好像插不进去

    回复于 2022-04-16 18:47 回复

    下面的方法确实有些问题,可以在里面根据值($this->{$attribute}之类的),判断 == 0 的话就直接return true,如果 == 1 的话,就再从数据库查询一次。

    觉得很赞
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
zq
主管

zq

注册时间:2017-02-09
最后登录:2022-12-08
在线时长:13小时59分
  • 粉丝3
  • 金钱320
  • 威望10
  • 积分550

热门问题