Eloquent - 如果外键有行,则防止删除数据 - Laravel

Posted

技术标签:

【中文标题】Eloquent - 如果外键有行,则防止删除数据 - Laravel【英文标题】:Eloquent - Prevent Deletion of data if foreign key has rows - Laravel 【发布时间】:2016-05-10 23:36:09 【问题描述】:

我知道我可以在迁移中限制删除外键数据。示例

$table->foreign('category_id')->references('id')->on('categories')->onDelete('restrict')->onUpdate('cascade');

如果外键中存在子项,尝试删除具有 eloquent 的类别将导致 mysql 错误。

我如何在 eloquent 中捕获这个错误并将其呈现给用户

【问题讨论】:

尝试 var_dump 你的删除方法,希望你能得到错误 我不想查看错误我想捕捉它也许..你能把雄辩的删除方法包装在try catch中吗? 是的,你可以用 try catch 换行 【参考方案1】:

我终于想到了这个

try 
     $category->delete();
     
catch (\Illuminate\Database\QueryException $e) 

        if($e->getCode() == "23000") //23000 is sql code for integrity constraint violation
            // return error to user here
        
    

【讨论】:

以上是关于Eloquent - 如果外键有行,则防止删除数据 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

Eloquent 可以替换数据库中的外键吗?

Laravel Eloquent truncate - 外键约束

数据库中使用外键和不使用外键有什么区别

如果满足条件,SQL Count 函数计算所有行

mysql怎么删除有外键约束的数据

Oracle:如果查询 1 有行数据,则联合所有查询 1 和查询 2 想要减去一些行