我正在寻找可以像findOrDo()一样的东西。就像数据未找到时一样。东西可能会像Laravel:处理失败的findOrFail()
Model::findOrDo($id,function(){
return "Data not found";
});
laravel有没有类似的东西,我可以做到这一点优雅和美丽?
*我试着用搜索引擎,但无法找到一个
我正在寻找可以像findOrDo()一样的东西。就像数据未找到时一样。东西可能会像Laravel:处理失败的findOrFail()
Model::findOrDo($id,function(){
return "Data not found";
});
laravel有没有类似的东西,我可以做到这一点优雅和美丽?
*我试着用搜索引擎,但无法找到一个
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)
}
这是按照文档中概述的正确方法'findOrFail和firstOrFail方法将检索查询的第一个结果。但是,如果未找到任何结果,则会抛出Illuminate \ Database \ Eloquent \ ModelNotFoundException参考http://laravel.com/docs/5.1/eloquent#retrieving-single-models – Jamesking56
Ref#http:// laravel-tricks。 COM /技巧/ findorfail – itsazzad
另一种方法是修改默认的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()
默认情况下,当你在一个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);
}
如果找不到模型,您想做什么? –
@MartinBean目前我想重定向。但后来我认为这对我至少应该是非常有用的。无需首先查询,然后检查是否存在 – cjmling