2015-10-13 10 views
0

Когда я использую Query Builder Я всегда считаю себя делать что-то вроде этого:Laravel Query Builder 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()? Создает ли Query Builder что-то вроде этого?

+0

Вы можете расширить строитель загореться, добавьте метод и замените фасад 'DB'. Могу ли я спросить, почему вы не используете «Красноречивый» здесь? :) – Dencker

+0

это простой запрос, где мне нужно одно поле, я не думаю, что мне нужен Eloquent здесь –

+0

Вся идея Eloquent (и ORM в целом) заключается в том, что вы создаете модель, представляющую ваши данные (в вашем случае, Таблица БД); Я бы сказал, что если вы используете Eloquent или используете Facade, у вас будет почти одинаковое количество накладных расходов. Красноречивый просто читаем. Вы можете сделать тест производительности, если хотите: – Dencker

ответ

1

Вы можете добавить его самостоятельно в построитель запросов, с помощью макроса:

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(); 
+0

приятно, это должно быть нажато на github/laravel –