Laravel中如何获取link列不为空或非NULL的记录?
在Laravel中获取link列不为空且非NULL的记录
嘿,我来帮你搞定这个问题!你当前的代码$socials = SocialIcon::whereNotNull('link')->get();确实能过滤掉link字段为NULL的记录,但如果数据库里存在link是空字符串('')的记录,这些还是会被查询出来。要同时排除NULL和空字符串,你需要把两个条件结合起来:
方案一:组合whereNotNull和where条件
这是最直观的方式,明确过滤掉NULL和空字符串:
$socials = SocialIcon::whereNotNull('link') ->where('link', '!=', '') ->get();
方案二:使用原生SQL条件(whereRaw)
如果你习惯写原生SQL逻辑,也可以用whereRaw直接拼接条件:
$socials = SocialIcon::whereRaw('link IS NOT NULL AND link != ""') ->get();
额外补充:处理含空白字符的"空值"
如果你的数据库里link字段可能存在仅包含空格、换行等空白字符的记录,还可以通过TRIM函数来过滤:
$socials = SocialIcon::whereNotNull('link') ->whereRaw('TRIM(link) != ""') ->get();
另外提一句:你之前用的get()->all()其实没必要哦——get()方法本身就会返回一个Laravel集合,all()是把集合转换成数组。如果后续需要用集合的便捷方法(比如map、filter),直接用get()返回的集合就好啦!
内容的提问来源于stack exchange,提问作者sd077
相关产品推荐
相关产品推荐

