2015-10-07 2 views
3

Я ищу что-то, что может быть похоже на findOrDo(). Подобно этому, когда данные не найдены. Что-то может быть похоже наLaravel: Handle findOrFail() on Fail

Model::findOrDo($id,function(){ 
    return "Data not found"; 
}); 

Есть ли подобные вещи в laravel, что я могу сделать это элегантно и красиво?

* Я пытался прибегая к помощи, но не мог найти один

+0

Что вы хотите сделать, если модель не найдена? –

+0

@MartinBean на данный момент я хочу перенаправить. Но потом я думаю, что это должно быть действительно полезно для меня, по крайней мере. Вначале нужно запросить и затем проверить, существует ли – cjmling

ответ

6
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) 
} 
+0

Это правильный способ сделать это, как описано в документации 'Методы findOrFail и firstOrFail будут извлекать первый результат запроса. Однако, если результат не найден, будет выбрано Illuminate \ Database \ Eloquent \ ModelNotFoundException. Http://laravel.com/docs/5.1/eloquent#retrieving-single-models – Jamesking56

+0

Ссылка # http: // laravel-tricks. ком/фокусы/findorfail – itsazzad

3

Другой вариант заключается в изменении по умолчанию Laravel Exception Обработчик, найденный в приложение/Исключения/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()

0

По умолчанию при использовании Красноречивых моделей findOrFail в приложении Laravel 5 и он терпит неудачу, он возвращает следующую ошибку:

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); 
} 

Источник: https://selftaughtcoders.com/from-idea-to-launch/lesson-16/laravel-5-findorfail-modelnotfoundexception-show-404-error-page/

Смежные вопросы