У меня есть этот вариант использования, когда я сохраняю запись после ее создания и хочу проверить на наличие ошибок и проинформировать моего пользователя о том, что произошло на стороне сервера sql, не показывая ему фактическое сообщение об ошибке (если таковое возникает).
Вот то, что я придумал на данный момент:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Book;
use App\Http\Requests\BookRequest;
use Illuminate\Database\QueryException;
class BookController extends Controller {
/* ... */
public function store(BookRequest $request) {
$book = new Book;
$book->name = $request->input('name');
$book->author = $request->input('author');
$book->published_at = $request->input('publishDate');
try {
$book->save();
}
catch( QueryException $exception ) {
$message = '';
if( $exception->code == 23000 ) { // 23000: MySQL error code for "Duplicate entry"
$message = 'This book already exists.';
}
else {
$message = 'Could not store this book.';
}
return redirect()
->back()
->withInput()
->withErrors($message);
}
return redirect()->route('book.index');
}
}
?>
Часть, в которой я жестко кодирую код ошибки MySQL, вызывает у меня ошибки, и он, безусловно, не переносим.
Вопрос
Как мы должны идентифицировать ошибки базы данных при сохранении / обновлении / удалении записи?
Можем ли мы сделать эту проверку универсальным способом (независимо от базы данных)?