在我的项目中,我有两个关联的表(类别和产品)。当我尝试删除分配给产品的类别时,Laravel返回:
SQLSTATE [23000]:完整性约束违规:1451无法删除或 更新父行:外键约束失败 (
magazyn
。products
,CONSTRAINTproducts_article_id_foreign
FOREIGN KEY(article_id
)REFERENCESarticles
(id
))(SQL:delete 来自articles
id
= 23)
我知道为什么laravel会返回此错误,但我有一个问题: 如何创建信息示例:“您无法删除此类别,因为它包含产品”
答案 0 :(得分:2)
通过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!';
}
}
您应该知道原始查询的上下文(无论是更新还是删除),因此您也可以根据该信息优化错误消息。