php - 如何从具有许多不同关系的表中删除并删除项目和所有相关项?
问题描述
我正在尝试删除具有以下 6 个关系的产品:
- 品牌->belongsTo(品牌::类);
- 标签->belongsToMany(Tag::class, 'tags_product');
- fields->belongsToMany(Field::class, 'product_field');
- 尺寸->belongsToMany(Size::class, 'product_size');
- 国家->belongsToMany(Country::class, 'country_product');
- countryProducts->hasMany(CountryProduct::class);
- productFields->hasMany(ProductField::class);
- exportationFactors->hasMany(ExportationFactor::class);
我必须先摆脱这些关系还是不一定?
目前我有这个删除功能的代码
ini_set('max_execution_time', 300);
$products = $request->all();
try {
DB::beginTransaction();
foreach ($products as $product) {
$dbProduct = $this->getProduct($product['SKU']);
$dbProduct->brand()->delete();
$dbProduct->tags()->delete();
$dbProduct->fields()->delete();
$dbProduct->sizes()->delete();
$dbProduct->countries()->delete();
$dbProduct->exportationFactors()->delete();
Log::error($dbProduct);
$dbProduct->delete();
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
throw new HttpException(500, 'Sucedio un error eliminando la información favor intentar de nuevo');
}
我得到这个错误
SQLSTATE [23000]:完整性约束违规:1451 无法删除或更新父行:外键约束失败(
sondel
.products
,CONSTRAINTproducts_brand_id_foreign
FOREIGN KEY(brand_id
)REFERENCESbrands
( ))(SQL:从哪里id
删除。= 2)brands
brands
id
解决方案
尝试这个:
$dbProduct->delete();
Brand::where('product_id', $dbProduct->id)->delete();
Tags::where('product_id', $dbProduct->id)->delete();
并添加所有表格
推荐阅读
- jquery - 使用 jQuery 时将 data-* 属性设置为未定义
- python - 实现 Kivy Button 鼠标悬停事件
- spring-boot - Wiremock stubFor 返回 SocketException:连接重置
- firebase - 当用户发送旧请求时如何在安全规则中获取用户的新 request.auth.token
- gremlin - 有人能解释一下 Gremlin 中的这个图遍历在做什么吗?
- python - 如何将 int 导出到“txt”文件,然后在以后能够将它们作为 int 导入回来
- python - 重定向下载 Django
- django - 在 Docker 中安装地理空间库
- javascript - 如何重新加载现有 dataTable() 中的数据?
- python-3.x - Python多个具有不同延迟的For循环