让我们分析一下您的代码:
$contact = Contact::where('individual_id', '=', $id)->first();
$contact
可以是Contact
模型的实例,也可以是null
.
如果它是一个Model实例,则调用->count()
基本上就是调用以下内容:
Contact::count(); // 25
$contact = Contact::where('individual_id', '=', $id)->first();
$contact->count() == Contact::count(); // true
模特有一个count()
的方法,所以你可以做$model->where(...)->count()
之类的事情.
如果$contact
是null
,则代码将失败:
$contact = null;
$contact->count(); // Error: `null->count()` is invalid.
因此,对于您的情况,基本上没有理由调用Contact::where(...)->first()->count()
,因为它不会返回1
,除非您的contacts
表中有合法的1条记录(相当可怕的假阳性).
另一个答案建议使用->get()
,这是有效的,因为Collection
有一个输出底层数组长度的count()
方法:
$contact = Contact::where('individual_id', '=', $id)->get();
$contact->count(); // 1
它将返回1,除非数据库中有多条记录,其中individual_id
等于$id
.
因此,TL;DR:->first()
返回单个Contact
实例或null
,不应该在之后使用->count()
,而::all()
或->get()
返回多个实例,可以在之后使用->count()
.