tp6 unique编辑重复问题

重写一个unique方法 其他的都继承这个方法

<?php

namespace app\common\validate;

use think\Validate;

class CommBaseValidate extends Validate
{


    public function unique($value, $rule, array $data = [], string $field = ''): bool
    {
        if (is_string($rule)) {
            $rule = explode(',', $rule);
        }
        if (false !== strpos($rule[0], '\\')) {
            // 指定模型类
            $db = new $rule[0];
        } else {
            $db = $this->db->name($rule[0]);
        }
        $key = $rule[1] ?? $field;
        $map = [];
        if (strpos($key, '^')) {
            // 支持多个字段验证
            $fields = explode('^', $key);
            foreach ($fields as $key) {
                if (isset($data[$key])) {
                    $map[] = [$key, '=', $data[$key]];
                }
            }
        } elseif (isset($data[$field])) {
            $map[] = [$key, '=', $data[$field]];
        } else {
            $map = [];
        }
        $pk = !empty($rule[3]) ? $rule[3] : $db->getPk();
        if (is_string($pk)) {
            if (isset($rule[2])) {
                if (isset($data[$rule[2]])) {
                    $map[] = [$pk, '<>', $data[$rule[2]]];
                } else {
                    $map[] = [$pk, '<>', $rule[2]];
                }
            } elseif (isset($data[$pk])) {
                $map[] = [$pk, '<>', $data[$pk]];
            }
        }
        if ($db->where($map)->field($pk)->find()) {
            return false;
        }
        return true;
    }
}
<?php

namespace app\common\validate;

use think\Validate;

class CommErpProductClassValidate extends CommBaseValidate
{
	# unique:erp_product_class(表名),name(字段名),id(排除重复的字段)
    protected $rule = [
        'name' => 'require|length:2,20|unique:erp_product_class,name,id',
    ];

    protected $message = [
        'name.require' => '名称不能为空',
        'name.length' => '名称为2-20个字符',
        'name.unique' => '名称不能重复',
    ];

    protected $scene = [
        'add' => ['name'],
        'edit' => ['name'],
    ];


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值