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

Gar*_*tet 20 php laravel

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

$patient = Patient::where('name', '=', 'Bob');
Run Code Online (Sandbox Code Playgroud)

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

Jak*_*son 24

如果数据库查询未找到任何匹配结果,则返回null.因此...

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

if ( is_null($patient) ) {
  App::abort(404);
}
Run Code Online (Sandbox Code Playgroud)

(注意:在您的原始问题中,您在查询中忘记了->first()(或->get()).不要忘记,否则您将得到一个Eloquent对象而不是结果.)


Jar*_*zyk 10

用这个:

$patient = Patient::where('name', '=', 'Bob')->firstOrFail();
Run Code Online (Sandbox Code Playgroud)

它会在成功时返回Eulqouent模型,或者在失败时抛出ModelNotFoundException.


Nia*_*wad 6

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

if ( $patient->isEmpty() ) {
  return response(['error' => 'Record not found'], 404);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道这已经过时了,但是随着第二次谷歌搜索,这就出现了...对于你不期望一条记录或不能使用的情况->firstOrFail()(我的用例是一个async typeahead api,最多返回10个结果),对我来说唯一有用的是count():

$patient = Patient::where('name', '=', 'Bob')->get(); //you could have more than one bob
if (!count($patient)) {
    return 'No records found';
}
Run Code Online (Sandbox Code Playgroud)