我正在尋找可以像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