【问题标题】:Laravel create new info about errorsLaravel 创建有关错误的新信息
【发布时间】:2016-07-05 20:38:34
【问题描述】:
在我的项目中,我有两个以关系连接的表(类别和产品)。当我尝试删除分配给产品的类别时,Laravel 返回:
SQLSTATE[23000]:违反完整性约束:1451 无法删除或
更新父行:外键约束失败
(magazyn.products, 约束products_article_id_foreign
外键 (article_id) 引用 articles (id)) (SQL: 删除
来自articles,其中id = 23)
我知道 laravel 为什么会返回此错误,但我有一个问题:
如何创建信息示例:“您无法删除此类别,因为它包含产品”
【问题讨论】:
标签:
php
laravel
relational-database
【解决方案1】:
通过 Eloquent 完成查询时出现的错误应该返回一个 QueryException 对象。因此,您可以捕获它,然后对其进行解析以显示一条消息。当然,第二部分是困难的部分,因为错误有很多变化,但您可能能够检测到常见的查询问题。
例如:
try {
// Run query that might fail here
} catch(QueryException $e) {
if (stristr($e->getMessage(), 'Integrity constraint violation') {
return 'Record cannot be deleted or updated because it has related entities!';
}
}
您应该知道原始查询的上下文(无论是更新还是删除),因此您也可以根据该信息细化错误消息。