Laravel中单个Eloquent对象调用count()返回结果错误问题
问题原因与解决方案
为什么单个模型对象调用count()返回表总记录数?
你通过first()获取的是单个Eloquent模型实例,而非集合。此时调用的count()方法并非集合的统计方法,而是Eloquent模型继承自Builder类的count()——这个方法会执行SELECT COUNT(*) FROM contacts语句,直接返回整个数据表的总记录数。
而Contact::all()返回的是Collection集合实例,它的count()方法是统计集合内的元素数量,所以返回25是符合预期的。
解决方法
方式1:判断对象是否存在后返回对应数值
如果要统计单个对象的“存在数量”(即1或0),可以先判断对象是否存在:
$contact = Contact::where('individual_id', '=', $id)->first(); $count = $contact ? 1 : 0; dd("Count = " . $count);
方式2:直接用查询构造器统计符合条件的记录数
如果只是需要统计符合条件的记录数量,不需要获取模型对象,直接调用查询构造器的count()即可:
$count = Contact::where('individual_id', '=', $id)->count(); dd("Count = " . $count);
方式3:将单个模型转为集合后统计
如果一定要使用集合的count()方法,可以把模型实例包装成集合:
$contact = Contact::where('individual_id', '=', $id)->first(); $count = collect([$contact])->count(); dd("Count = " . $count);
内容的提问来源于stack exchange,提问作者JLZenor
相关产品推荐
相关产品推荐

