2015-10-07 218 views
3

我正在寻找可以像findOrDo()一样的东西。就像数据未找到时一样。东西可能会像Laravel:处理失败的findOrFail()

Model::findOrDo($id,function(){ 
    return "Data not found"; 
}); 

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

*我试着用搜索引擎,但无法找到一个

+0

如果找不到模型,您想做什么? –

+0

@MartinBean目前我想重定向。但后来我认为这对我至少应该是非常有用的。无需首先查询,然后检查是否存在 – cjmling

回答

6
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) 
} 
+0

这是按照文档中概述的正确方法'findOrFail和firstOrFail方法将检索查询的第一个结果。但是,如果未找到任何结果,则会抛出Illuminate \ Database \ Eloquent \ ModelNotFoundException参考http://laravel.com/docs/5.1/eloquent#retrieving-single-models – Jamesking56

+0

Ref#http:// laravel-tricks。 COM /技巧/ findorfail – itsazzad

3

另一种方法是修改默认的Laravel异常处理程序,在应用程序/异常发现/ Handler.php在render()功能我做了这个变化:

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); 
} 

这种方式,而不是得到一个500,我发回了自定义消息400,而不必做每一个findOrFail()

0
一个尝试catch

默认情况下,当你在一个Laravel 5应用程序中使用雄辩的模型findOrFail和失败,它返回以下错误:

ModelNotFoundException in Builder.php line 129: 
'No query results for model [App\Model]'. 

因此,要捕获异常,并包含“您的错误信息显示自定义404页哎呀” ....

打通app/Exceptions/Handler.php文件,并添加以下所示的渲染功能的顶部的代码:

public function render($request, Exception $e) 
{ 
    if ($e instanceof \Illuminate\Database\Eloquent\ModelNotFoundException) 
    { 
     abort(404, 'Oops...Not found!'); 
    } 

    return parent::render($request, $e); 
} 

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