Php 防止外键错误MySQL
我有一个数组,当我试图在数据库上使用INSERT时,我得到一个外键错误。但是检查它是哪一项有点困难,因为数组最多可以插入15000项。所以我创造了一些非常肮脏的东西:Php 防止外键错误MySQL,php,mysql,laravel-5.3,Php,Mysql,Laravel 5.3,我有一个数组,当我试图在数据库上使用INSERT时,我得到一个外键错误。但是检查它是哪一项有点困难,因为数组最多可以插入15000项。所以我创造了一些非常肮脏的东西: foreach ($items as $index => $item) { try { // $items = ['id' => 1, 'category_id' => 2, 'product_id' => 3] ProductCategoryPivot::inse
foreach ($items as $index => $item) {
try {
// $items = ['id' => 1, 'category_id' => 2, 'product_id' => 3]
ProductCategoryPivot::insert( $item );
} catch( \Exception $e ) {
}
}
有没有更好的方法来处理这个问题?如果API返回15K个条目,我将执行15K个查询,这是一个很大的问题。您可能会对真正的问题感兴趣,可能是您正在将数据插入到一个没有父值的子表中。是的,这就是问题所在,我需要这些值,这就是为什么我试着抓住它:SDo a
SELECT fk FROM child LEFT JOIN parent on。。。如果paretn.id为NULL
要查找缺少的VAL,您可以先查询数据库以获取不存在的id,例如类别::whereNotIn(“id”,数组列($items,“Category\u id”))
或类似的内容,在插入之前,请检查类别是否存在。此错误基本上是指当关系中没有父行时,您试图插入子行。因此,您必须在尝试插入之前检查父级是否存在,或者在Catch块中检查此特定错误,如果是错误,则继续循环。可能值得报告丢失的父行的键。您可能对真正的问题感兴趣,可能是您正在将数据插入到没有父值的子表中。是的,这就是问题所在,我需要这些值,这就是为什么我尝试并抓住它的原因:SDo a从子表中选择fk左连接父表on。。。如果paretn.id为NULL
要查找缺少的VAL,您可以先查询数据库以获取不存在的id,例如类别::whereNotIn(“id”,数组列($items,“Category\u id”))
或类似的内容,在插入之前,请检查类别是否存在。此错误基本上是指当关系中没有父行时,您试图插入子行。因此,您必须在尝试插入之前检查父级是否存在,或者在Catch块中检查此特定错误,如果是错误,则继续循环。可能也值得报告缺少父行的键