2015-10-07 248 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/