我使用的是Laravel 4。假设我有一个Eloquent模型(病人),我想找一个叫Bob的病人,我会这样做:
$patient = Patient::where('name', '=', 'Bob');
检查$patient是否为有效记录的最佳方法是什么?
如果数据库查询没有找到任何匹配的结果,则返回null
。因此
$patient = Patient::where('name','=','Bob')->first();
if ( is_null($patient) ) {
App::abort(404);
}
(注意:在最初的问题中,您在查询中忘记了->first()
(或->get()
)。别忘了,否则你会得到一个Eloquent对象,而不是结果。)
使用这个:
$patient = Patient::where('name', '=', 'Bob')->firstOrFail();
它将在成功时返回Eulquent模型,或在失败时抛出ModelNotFoundException。
我知道这是旧的,但这是谷歌第二次搜索时出现的,所以。对于那些不需要一条记录或无法使用->firstOrFail()
的情况(我的用例是一个异步typeahead api,最多返回10个结果),唯一对我有效的是count():
$patient = Patient::where('name', '=', 'Bob')->get(); //you could have more than one bob
if (!count($patient)) {
return 'No records found';
}
$patient = Patient::where('name','Bob')->get();
if ( $patient->isEmpty() ) {
return response(['error' => 'Record not found'], 404);
}
类似Patient::where('name', '=', 'Bob')->exists()
的东西可能会起作用。它将返回一个布尔值。
只需使用原生php中的empty()
即可解决所有问题,如果对象为null,则返回true,如果查询生成器中laravel的collection
为空(但已初始化),则也将返回true。
$contributor = Contributor::whereVendor('web')->first();
if(empty($contributor)){
...
}
在传递id
参数以获取单个记录的情况下使用findOrFail($id)
我在寻找::find($id)->firstOrFail
语法的解决方案时发现了这个错误。
$patient = Patient::findOrFail($id);