Laravel 对于 Mysql 字段string类型查询,当使用数字对这个字段进行查询,PHP弱类型语言导致索引失效 
                                                    
                        
                    
                    
  
                    
                    不知道各位大佬有其他更好的处理方式,
我是直接加了 trait 类,在需要用到的Model use,但这里会存在SQL注入的风险
trait ModelQueryExpansion
{
    public function scopeConversionWhere($query,$column,$value)
    {
        if (is_array($value)) {
            if (empty($value)) {
                return $query->whereRaw("{$column} in ('')");
            }
            $value = array_unique($value);
            $str = '"' . implode('","', $value) . '"';
            return $query->whereRaw("{$column} in ($str)");
        } elseif(is_numeric($value)) {
            return $query->whereRaw("{$column} = '{$value}'");
        }else{
            return $query->where("{$column} = ?",[$value]);
        }
    }
}
试过大佬提供的方式,改成了这样
public function scopeConversionWhere($query,$column,$value)
{
      if (is_array($value)) {
          if (empty($value)) {
              return $query->whereRaw("0 = 1");
          }
          $value = array_map(function($v){
              return strval($v);
          },$value);
         return $query->whereIn($column,$value);
      } else{
          return $query->where($column,strval($value));
      }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           zhangwuphp 的个人博客
 zhangwuphp 的个人博客
         
                     
                     
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: