使用“Laravel查询”构建器排除某些字符串

时间:2016-05-03 09:05:24

标签: php mysql laravel laravel-query-builder

我们假设我有一个名为table的表,它有一个名为path的列,path中的字符串格式如下所示

row path
1   /path1/aa/bg/c/da
2   /path1/ab/v
3   /path1/a/ba/ca

如您所见,每个细分由char /分隔。 如何使用where格式化like中的条件,以便返回的唯一行为row 2 2 slashes

我试过了 DB::table('table')->where('path','LIKE','/path1/%/%')->get()

但上面的查询将返回由于最后一个%而导致的所有行。如何在最后/之后排除%,以便在结果中不包含最后/之后的字符%的记录?

1 个答案:

答案 0 :(得分:1)

如果您正在寻找匹配的一个角色:

DB::table('table')->where('path','LIKE','/path1/_/_')->get()

“test%”匹配

之后的所有字符

“%test”匹配

之前的所有字符

“_”匹配一个字符

ELSE如果您匹配的字符串长度是可变的,则只能使用正则表达式

select * from table where path REGEXP '\/path1\/[a-zA-Z0-9_]+\/[a-zA-Z0-9_]+'

匹配特殊字符的更通用匹配:

select * from table where path REGEXP '\/path1\/.+\/.+'
相关问题