不知道各位大佬有其他更好的處理方式,
我是直接加了 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 協議》,轉載必須註明作者和本文連結