本文介绍了Eloquent ->first() 如果 ->exists()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获取条件匹配的表中的第一行:

I want to get the first row in table where condition matches:

User::where('mobile', Input::get('mobile'))->first()

效果很好,但如果条件不匹配,则会抛出异常:

It works well, but if the condition doesn't match, it throws an Exception:

ErrorException
Trying to get property of non-object

目前我是这样解决的:

if (User::where('mobile', Input::get('mobile'))->exists()) {
    $user = User::where('mobile', Input::get('mobile'))->first()
}

我可以在不运行两个查询的情况下执行此操作吗?

Can I do this without running two queries?

推荐答案

注意:first() 方法不会像原始问题中描述的那样抛出异常.如果您收到此类异常,则说明您的代码中存在另一个错误.

使用 first() 并检查结果的正确方法:

The correct way to user first() and check for a result:

$user = User::where('mobile', Input::get('mobile'))->first(); // model or null
if (!$user) {
   // Do stuff if it doesn't exist.
}

其他技术(不推荐,不必要的开销):

Other techniques (not recommended, unnecessary overhead):

$user = User::where('mobile', Input::get('mobile'))->get();

if (!$user->isEmpty()){
    $firstUser = $user->first()
}

try {
    $user = User::where('mobile', Input::get('mobile'))->firstOrFail();
    // Do stuff when user exists.
} catch (ErrorException $e) {
    // Do stuff if it doesn't exist.
}

// Use either one of the below. 
$users = User::where('mobile', Input::get('mobile'))->get(); //Collection

if (count($users)){
    // Use the collection, to get the first item use $users->first().
    // Use the model if you used ->first();
}

每种方法都是获得所需结果的不同方式.

Each one is a different way to get your required result.

这篇关于Eloquent ->first() 如果 ->exists()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 22:57