gpt4 book ai didi

mysql - 删除具有关系的相关列的最佳方法

转载 作者:搜寻专家 更新时间:2023-10-30 22:26:35 25 4
gpt4 key购买 nike

例如,我们有 p_categories 表和产品表。

p_categories 表是:

╔═══╦════════════╦═════════════╗
║ ║ id ║ name ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 1 ║ tech ║
║ 2 ║ 2 ║ food ║
║ 3 ║ 3 ║ sport ║
╚═══╩════════════╩═════════════╝

产品表是:

╔════╦═══════════════╦═════╗
║ id ║p_categories_id║name ║
╠════╬═══════════════╬═════╣
║ 1 ║ 1 ║phone║
╠════╬═══════════════╬═════╣
║ 2 ║ 2 ║spoon║
╠════╬═══════════════╬═════╣
║ 3 ║ 2 ║fork ║
╚════╩═══════════════╩═════╝

在 pcategory 模型中我有:

public function products()
{
return $this->hasMany(Product::class, 'p_categories_id');
}

在产品模型中:

public function category()
{
return $this->belongsTo(PCategory::class,'p_categories_id', 'id');
}

当我尝试删除技术类别时,必须同时删除 product 表 id=1, p_categories_id=1, name=phone 行。

我认为可能的解决方案:

1) 将列类型更改为级联。我看了一些帖子。人们大多不推荐这个。

2)在类目模型中加入一个新的函数

protected static function boot() {
parent::boot();
static::deleting(//something, i don't know how to make.); }

我需要用这个方法改变整个项目。因为没有一个。我正在寻找最好的方法来做到这一点。我写了 2 个可能的解决方案,但我仍然不知道如何正确制作它们。我希望我能解释一下,提前谢谢你

最佳答案

您必须使用数据库外键约束。对于使用 laravel 迁移制作数据库,您可以使用

$table->foreign('p_categories_id')
->references('id')->on('p_categories ')
->onDelete('cascade');

参见 https://laravel.com/docs/5.5/migrations#foreign-key-constraints

关于mysql - 删除具有关系的相关列的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com