Laravel检查first()是否返回任何内容

时间:2018-04-15 14:32:26

标签: laravel

我想知道如果first()没有返回任何东西的正确方法是?

现在我用它:

$user = User::where('role_id', $role)->first(['role_id']);

        if (is_null($user)) {
            //Not found, handle some stuff
        } else {
            $user->DoSomeUpdatesOnThatUser();
        }

这似乎有效。我知道有一个firstOrFail()但是我在一个作业中使用这个函数所以我不需要返回一个404页面只是处理它不存在

2 个答案:

答案 0 :(得分:0)

您可以在这种情况下使用isNotEmpty方法:

$user = User::where('role_id', $role)->get();// get the collection
if ($user->isNotEmpty()) {// checking if it is empty or not
    $user->first()->DoSomeUpdatesOnThatUser();
}

但无论如何,我认为它比你的方式更清洁。

答案 1 :(得分:0)

您提到firstOrFail(),但这不仅限于显示404页面。它所做的只是抛出一个ModelNotFoundException,您可以手动捕获它,而不是让它在其他地方处理。

例如:

use Illuminate\Database\Eloquent\ModelNotFoundException;

try {
    $user = User::where('role_id', $role)->first(['role_id']);
    $user->doTheFunkyStuff();
catch (ModelNotFoundException $e) {
    myAmazingFailureFunction();
}

编辑:那就是说,我认为你的方法也没有任何问题。 :)