Laravel集合筛选zip_code_check含'-'的行:解决like查询无效问题
Laravel集合筛选包含指定字符的行
你之前用$collection->where('zip_code_check', 'like'. '%-%')无效的原因是:Laravel集合的where方法默认是严格相等匹配,并不支持SQL中的like语法,所以这种写法无法筛选出包含-的行。
下面是几种可行的实现方法:
方法一:使用filter结合Laravel字符串辅助函数
通过filter遍历集合,用str_contains判断字段是否包含-:
$filteredCollection = $collection->filter(function ($item) { return str_contains($item['zip_code_check'], '-'); });
如果在类中使用,也可以引入Str类调用静态方法:
use Illuminate\Support\Str; $filteredCollection = $collection->filter(function ($item) { return Str::contains($item['zip_code_check'], '-'); });
方法二:Laravel 9+ 专用便捷方法
Laravel 9及以上版本提供了whereStrContains方法,直接实现字符串包含筛选:
$filteredCollection = $collection->whereStrContains('zip_code_check', '-');
方法三:使用PHP原生函数strpos
如果不想依赖Laravel辅助函数,用原生strpos判断(注意要严格判断返回值不为false):
$filteredCollection = $collection->filter(function ($item) { return strpos($item['zip_code_check'], '-') !== false; });
以上方法都能筛选出zip_code_check字段包含-的所有行,你可以根据自己的Laravel版本和习惯选择。
内容的提问来源于stack exchange,提问作者Alisha Lamichhane
相关产品推荐
相关产品推荐

