使用eloquent在LIKE SQL查询中转义通配符

时间:2016-01-29 18:32:19

标签: sql laravel eloquent

我想在这个雄辩的查询中阻止标准的SQL下划线匹配:

$data = DB::table('items')
    ->distinct()
    ->select('item_name')
    ->where('item_name', 'LIKE', $term . '%')
    ->groupBy('item_name')
    ->take(15)
    ->get();

任何人都知道如何以雄辩的方式做到这一点?我需要使用whereRaw吗? 什么是语法?

2 个答案:

答案 0 :(得分:1)

此辅助方法会转义所有LIKE个特殊字符,包括转义字符本身。

/**
 * Escape special characters for a LIKE query.
 *
 * @param string $value
 * @param string $char
 *
 * @return string
 */
function escape_like(string $value, string $char = '\\')
{
    return str_replace(
        [$char, '%', '_'],
        [$char.$char, $char.'%', $char.'_'],
        $value
    );
}

所以你会像$query->where('foo', 'like', '%'.escape_like('bar').'%')

那样使用它

答案 1 :(得分:-1)

将以下内容用于laravel eloquent

 $data = Items::whereRaw("item_name like '%$term%' escape '_' ")
     ->take(15)->select('item_name')->distinct()->get();

 $result = $data->groupBy('item_name');

 return $result;

在查询中使用转义

@RouteConfig([
  { name: "Home", component: HomeCMP, path: "/home", useAsDefault: true},
  { name: "Videos", component: VideosCMP, path: "/videos/..."}
])