Laravel:在失败时处理findOrFail()

cjm*_*ing 7 php laravel laravel-5.1

我正在寻找可以像findOrDo()的东西.就像没有找到数据时一样.有点像

Model::findOrDo($id,function(){
   return "Data not found";
});
Run Code Online (Sandbox Code Playgroud)

在laravel有任何类似的东西,我可以优雅和美丽地做到这一点?

*我试过谷歌搜索但找不到

Mei*_*lla 14

use Illuminate\Database\Eloquent\ModelNotFoundException;

// Will return a ModelNotFoundException if no user with that id
try
{
    $user = User::findOrFail($id);
}
// catch(Exception $e) catch any exception
catch(ModelNotFoundException $e)
{
    dd(get_class_methods($e)); // lists all available methods for exception object
    dd($e);
}
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记您的半冒号男孩和女孩。上面的示例在每个`dd()`之后应有半冒号。 (3认同)

Pit*_*ate 5

另一个选择是修改默认Laravel异常处理程序,该render()函数在我进行此更改的函数上的app / Exceptions / Handler.php中找到:

public function render($request, Exception $e)
{
    if(get_class($e) == "Illuminate\Database\Eloquent\ModelNotFoundException") {
        return (new Response('Model not found', 400));
    }
    return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)

这样一来,我得到的是500条,而不是500条,它带有自定义消息,而不必每次都尝试捕获 findOrFail()


小智 5

默认情况下,当您使用 Eloquent 模型时\xe2\x80\x99sfindOrFail并且失败时,它会返回以下错误:

\n\n
ModelNotFoundException in Builder.php line 129:\n\'No query results for model [App\\Model]\'.\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,要捕获异常并显示自定义 404 页面,其中包含“Ooops”等错误消息......

\n\n

打开app/Exceptions/Handler.php文件,并将如下所示的代码添加到渲染函数的顶部:

\n\n
public function render($request, Exception $e)\n{\n   if ($e instanceof \\Illuminate\\Database\\Eloquent\\ModelNotFoundException) \n   {\n      abort(404, \'Oops...Not found!\');\n   }\n\n   return parent::render($request, $e);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

来源:https ://selftaughtcoders.com/from-idea-to-launch/lesson-16/laravel-5-findorfail-modelnotfoundexception-show-404-error-page/

\n