2016-03-26 3 views
0

Я хочу использовать красноречив, чтобы создать запись БД так:Laravel модели Обработка ошибок при создании

MFUser::create(array(
     'user_reference' => $this->userReference, 
     'first_name' => $this->firstName, 
     'last_name' => $this->lastName, 
     'user_type_id' => $this->userTypeId, 
     'email' => $this->email, 
     'password' => $this->password 
    )); 

Он работает хорошо, за исключением случая, когда точно так же данные помещаются в поля, которые как ожидается, не должно быть дубликатов. Тогда я получаю QueryExecption.

Но как правильно выполнить обработку ошибок здесь, чтобы проверить, возникает ли это исключение запроса, чтобы я мог вернуть ответ от моего сервера клиенту через json?

ответ

0

Просто оберните этот код в try - catch блок. Что-то вроде этого:

try { 
    MFUser::create(array(
     'user_reference' => $this->userReference, 
     'first_name' => $this->firstName, 
     'last_name' => $this->lastName, 
     'user_type_id' => $this->userTypeId, 
     'email' => $this->email, 
     'password' => $this->password 
    )); 
} catch (\Illuminate\Database\QueryException $exception) { 
    // You can check get the details of the error using `errorInfo`: 
    $errorInfo = $exception->errorInfo; 

    // Return the response to the client.. 
} 
0

Просто использовать try/catch блока.

use Illuminate\Database\QueryException; 

// ... 

try { 
    // DB query goes here. 
} catch (QueryException $e) { 
    // Logics in case there are QueryException goes here 
} 

// ... 
1

Я предпочитаю, чтобы зарезервировать try/catch «S для неожиданных событий, которые не могут быть обработаны в другом месте. В этом случае вы можете использовать проверку как первую меру, а обработчик исключений - в качестве меры резервного копирования.

Если запрос формы не выполнен, сообщения об ошибках мигают, и пользователь возвращается на предыдущую страницу (где была отправлена ​​форма), и вы можете обрабатывать сообщения изящно. Validation requests

// First line of defence - gracefully handle 
// Controller 
public function store(MFUserRequest $request) 
{ 
    // The incoming request is valid... 
    MFUser::create(array(...)); 
} 

// Form Request 
class MFUserRequest extends Request 
{ 
    public function rules() 
    { 
     return [ 
      'email' => 'required|email|unique:users,email', 
     ]; 
    }  
} 

В другом месте, в каталоге App \ Исключения у вас есть класс обработчика исключений, который может быть подвох все для различных ошибок. Используйте это, когда вы не смогли грациозно обработать его дальше.

// Second line of defence - something was missed, and a model was 
// created without going via the above form request 
namespace App\Exceptions; 

class Handler extends ExceptionHandler 
{ 
    public function render($request, Exception $e) 
    {   
     if($e instanceof QueryException) { 
      // log it or similar. then dump them back on the dashboard or general something bad 
      // has happened screen 
      return redirect()->route('/dashboard'); 
     } 
    } 
} 
Смежные вопросы