热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:在Laravel中创建,更新或删除记录时识别sql错误的最佳方法

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在Laravel中创建,更新或删除记录时识别sql错误的最佳方法相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在Laravel中创建,更新或删除记录时识别sql错误的最佳方法相关的知识,希望对你有一定的参考价值。



我有这个用例,当我在创建它后保存记录并且我想检查错误,并告知我的用户sql服务器端发生了什么而没有向他显示实际的错误消息(如果有的话)。

这就是我现在想出来的:

php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppBook;
use AppHttpRequestsBookRequest;
use IlluminateDatabaseQueryException;
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错误代码的部分让我感到困扰,它肯定不可移植。

在保存/更新/删除记录时,我们如何识别数据库错误?

我们能以多种方式进行此验证(数据库不可知)吗?


答案

一种选择是在保存之前使用验证。最简单的方法是使用Laravel-Model-Validation。你可以这样做:

class Book extends Model {
protected static $rules = [
'name' => 'required|unique:books',
'published_at' => 'required|date'
];
//Use this for custom messages
protected static $messages = [
'name.unique' => 'A book with this name already exists.'
];
}

这可以通过听saving轻松地手动滚动。见Jeffrey Way的code:

/**
* Listen for save event
*/
protected static function boot()
{
parent::boot();
static::saving(function($model)
{
return $model->validate();
});
}


推荐阅读
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • VMware Horizon View 5.0桌面虚拟化部署实践与心得
    在近期的研究中,我花费了大约两天时间成功部署了桌面虚拟化环境,并在此过程中积累了一些宝贵的经验。本文将分享这些经验和部署细节,希望能对同样关注桌面虚拟化的同行有所帮助。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 使用Nginx反向代理实现多域名端口映射
    本文介绍如何通过配置本地hosts文件和Nginx反向代理,实现多个虚拟域名的端口映射,使用户可以通过标准HTTP端口80访问不同后端服务。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 本文探讨了一个场景:用户成功登录后,如何确保Master-Detail视图控制器以模态形式展示。 ... [详细]
  • 本文详细探讨了在微服务架构中,使用Feign进行远程调用时出现的请求头丢失问题,并提供了具体的解决方案。重点讨论了单线程和异步调用两种场景下的处理方法。 ... [详细]
author-avatar
清醒还是迷惘_123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有