使用 callback 自动验证字段唯一

jerry thinkphp 2015年11月19日 收藏
使用 callback 使add 和 update 使用一个自动验证条件

ThinkPHP 3.x 之后的版本已经支持更新时自动验证唯一.
所以此代码失效, 感谢微博 @小杰_Dino 告知.

=====2014-05-12 之前的内容====
让检查唯一合并为一个验证条件.
如果你有更好的, 欢迎一起讨论.
  1. public $_validate = array(
  2.         array('name', 'chkUniName', '英文代码已经存在.', self::EXISTS_VALIDATE, 'callback'),

  3. 放在 CommonModel 中.
  4. //检查唯一
  5.     public function chkUni($field){
  6.         if(empty($field)){
  7.             return false;
  8.         }
  9.         $map = array();
  10.         $pk = $this->getPk();
  11.         //如果有主键传入, 说明是编辑, 加入排除自己的条件.
  12.         if(!empty($_REQUEST[$pk])){
  13.            $map[$pk] = array('neq', intval($_REQUEST[$pk]));
  14.         }
  15.         $map[$field] = array('eq', trim($_REQUEST[$field]));
  16.         if(null === $this->where($map)->find()){
  17.             return true;
  18.         }else{
  19.             return false;
  20.         }
  21.     }

  22.     //检查 name 是否存在
  23.     protected function chkUniName(){
  24.         return $this->chkUni('name');
  25.     }