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 协议》,转载必须注明作者和本文链接
推荐文章: