检查Eloquent查询是否没有回答的最佳方法是什么?

时间:2014-04-10 16:39:49

标签: php laravel

我正在使用Laravel 4.说我有一个雄辩模型(患者),我想找一个名叫Bob的病人,我会这样做:

$patient = Patient::where('name', '=', 'Bob');

检查$ patient是否为有效记录的最佳方法是什么?

7 个答案:

答案 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);