2015-10-13 371 views
0

當我使用查詢生成器我總是覺得自己做這樣的事情:Laravel查詢生成器firstOrFail()?

$item = \DB::table('table')->where('slug',$slug)->first(); 

    if ($item===null) 
     throw \Exception('Not found'); 

這可能,如果有一個firstOrFail()一樣雄辯地伊斯利解決:

$item = \DB::table('table')->where('slug',$slug)->firstOrFail(); 

口若懸河的唯一途徑要使用firstOrFail()?查詢生成器是否允許這樣的事情?

+0

你可以擴展照亮建設者,添加方法並替換'DB'外觀。我可以問你爲什麼不在這裏使用雄辯嗎? :) – Dencker

+0

這是一個簡單的查詢,我需要一個字段,我不認爲我需要這裏的雄辯 –

+0

Eloquent(和ORM的一般)背後的整個想法是,你創建一個模型來表示你的數據(在你的情況下, DB表);我會說,如果你使用Eloquent或者使用Facade,你將會有幾乎相等的開銷。雄辯才更具可讀性。你可以做一個性能測試,如果你想:) – Dencker

回答

1

你可以自己添加它來查詢生成器,通過宏:

DB::query()->macro('firstOrFail', function() { 
    if ($record = $this->first()) { 
     return $record; 
    } 

    throw new Exception('No records found'); 
}); 

然後你可以使用它你口才同樣的方式:

$item = DB::table('table')->where('slug', $slug)->firstOrFail(); 
+0

不錯,這應該推到github/laravel –