2015-10-13 168 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 –