Laravel集合筛选sv_email不为空返回空集合的问题如何解决
解决方案
问题根因
Laravel 集合的 where 方法默认采用松散比较(==),部分低版本Laravel对where方法的不等运算符支持存在瑕疵,会出现等值筛选正常、不等值筛选失效的问题。另外你原有代码外包裹的collect()是冗余写法,DB::get()返回的结果本身就是Laravel Collection实例,不需要额外转换。
可行方案
方案1:使用whereNot反向筛选(推荐,Laravel 5.7+支持)
直接对你已有的集合执行反向排除,匹配你原有可正常运行的等值筛选逻辑:
$result = $c->whereNot('sv_email', '');
方案2:使用filter自定义回调(全版本兼容,最稳定)
通过回调手动写判断逻辑,完全可控,不会受版本或者比较规则影响:
$result = $c->filter(function ($item) { // 严格判断sv_email不为空字符串 return trim($item->sv_email) !== ''; });
如果你的集合是数组格式,将$item->sv_email替换为$item['sv_email']即可,额外加trim()可以顺便排除全是空白字符的异常值。
方案3:为where指定严格比较
如果要继续使用运算符写法,给where方法传入第四个参数true启用严格比较:
$result = $c->where('sv_email', '!=', '', true);
内容的提问来源于stack exchange,提问作者Jhoni Davinne Morales dos Sant
相关产品推荐
相关产品推荐

