当我使用查询生成器时,我总是发现自己在做这样的事情:
$item = \DB::table('table')->where('slug',$slug)->first();
if ($item===null)
throw \Exception('Not found');
如果像Eloquent这样的firstOrFail()可以很容易地解决这个问题:
$item = \DB::table('table')->where('slug',$slug)->firstOrFail();
Eloquent是使用firstOrFail()
的唯一方法吗? Query Builder是否允许这样的内容?
答案 0 :(得分:2)
您可以通过宏自行将其添加到查询构建器:
DB::query()->macro('firstOrFail', function () {
if ($record = $this->first()) {
return $record;
}
throw new Exception('No records found');
});
然后你可以像使用Eloquent一样使用它:
$item = DB::table('table')->where('slug', $slug)->firstOrFail();
答案 1 :(得分:1)
您快到了,laravel确实提供了一种检查此类内容的方法
DB::table('table')->where('slug', $slug)->exists()
DB::table('table')->where('slug', $slug)->doesntExist()
它将返回布尔值,希望对您有帮助
更新: 我在项目中的工作方式是
function checkIfExists($table, $value, $field = 'id'){
return DB::table($table)->where($field, $value)->exists()
}
function getFirst($table, $value, $field = 'id'){
return DB::table($table)->where($field, $value)->first()
}
然后像这样使用此功能
if(checkIfExists('users', 2))
$user = getFirst('users', 2)
else
// throw exception or something
希望这会有所帮助