国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

top-think/think-validate 唯一性驗證一直失敗

鄒意

問題描述

數(shù)據(jù)庫用的webman/think-orm
驗證器里面定義某個字段是唯一的
經(jīng)過測試不管是添加,還是更新數(shù)據(jù):驗證都無法通過
測試多個驗證器都是這樣,只要有唯一就無法通過
不知道是驗證器的問題還是模型的問題

程序代碼或配置

class AdminMenu extends Validate
{

    protected $rule =   [
        'title' => 'require',
        'type' => 'require|in:1,2,3',
        'name'=>'unique:AdminMenu', //這個字段無法驗證通過
        'component_path'=>'unique:AdminMenu',
    ];

    protected $message  =   [
        'title.require'  => '請輸入菜單名稱',
        'type.require'  => '請選擇類型',
        'type.in'  => '非法的類型值',
        'name.unique' => '組件name值已存在,請更換',
        'component_path.unique' => '組件路勁值已存在,請更換',
    ];

}

翻源碼跟tp的對比

tp的有下面這個方法,手動安裝topthink/think-validate就沒得這個方法
public function unique

1389 2 0
2個回答

yzh52521
  • 鄒意 2023-08-09

    報錯:Class "Symfony\Component\Translation\Translator" not found,語言包加載失敗,將插件的Validate.php 1635行config( 'translations.locale' )改為config( 'translation.locale' )能正常讀取配置后,還是報這個錯

  • yzh52521 2023-08-10

    你沒有安裝 symfony/translation

864328615
/**
 * 基礎驗證器
 */
class Base extends validate
{
    /**
     * 唯一驗證
     * @param $value
     * @param $rule
     * @param array $data
     * @param string $field
     * @return bool
     */
    public function unique($value, $rule, array $data = [], string $field = ''): bool
    {
        if (is_string($rule)) {
            $rule = explode(',', $rule);
        }
        $db = Db::table($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]];
        }
        //獲取主鍵
        if(!empty($rule[3])){
            $pk = $rule[3];
        }else{
            $result = Db::select("SHOW KEYS FROM ".$rule[0]." WHERE Key_name = 'PRIMARY'");
            $pk = $result[0]->Column_name;
        }
        if (is_string($pk)) {
            if (isset($rule[2])) {
                $map[] = [$pk, '<>', $rule[2]];
            } elseif (isset($data[$pk])) {
                $map[] = [$pk, '<>', $data[$pk]];
            }
        }
        if ($db->where($map)->select($pk)->exists()) {
            return false;
        }
        return true;
    }
}

這是lv的模型 tp的話自己去源碼把拉下 復制出來就行了

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??