我正在使用Laravel 4.说我有一个雄辩模型(患者),我想找一个名叫Bob的病人,我会这样做:
$patient = Patient::where('name', '=', 'Bob');
检查$ patient是否为有效记录的最佳方法是什么?
答案 0 :(得分:22)
如果数据库查询未找到任何匹配结果,则返回null
。因此...
$patient = Patient::where('name','=','Bob')->first();
if ( is_null($patient) ) {
App::abort(404);
}
(注意:在您的原始问题中,您在查询中忘记了->first()
(或->get()
)。请不要忘记,否则您将获得一个Eloquent对象而不是结果。)
答案 1 :(得分:9)
使用它:
$patient = Patient::where('name', '=', 'Bob')->firstOrFail();
它会在成功时返回Eulqouent模型,或者在失败时抛出ModelNotFoundException。
答案 2 :(得分:5)
我知道这已经过时了,但是当第二个谷歌搜索时,这就出现了,所以。 。 。对于你不期望一条记录或不能使用for(var i=0; i<0;i++) {
console.log(links[i]);
}
的情况(我的用例是async typeahead api,最多返回10条结果),对我来说唯一有用的是count():
->firstOrFail()
答案 3 :(得分:4)
$patient = Patient::where('name','Bob')->get();
if ( $patient->isEmpty() ) {
return response(['error' => 'Record not found'], 404);
}
答案 4 :(得分:1)
像Patient::where('name', '=', 'Bob')->exists()
之类的东西可能有用。它将返回一个布尔值。
答案 5 :(得分:1)
从原生php中使用empty()
将解决所有问题,如果对象为null则返回true,如果来自查询构建器的laravel的collection
为空(但已初始化),它也将返回true。
$contributor = Contributor::whereVendor('web')->first();
if(empty($contributor)){
...
}
答案 6 :(得分:0)
如果要传递findOrFail($id)
参数以获取单个记录,请使用id
我在寻找::find($id)->firstOrFail
语法错误的解决方案时遇到了这个问题。
$patient = Patient::findOrFail($id);