Laravel要删除的多对多剩余id

Laravel要删除的多对多剩余id,laravel,laravel-5,Laravel,Laravel 5,目前,我在Laravel 5.5上有3个雄辩的模型 产品 产品类别 类别 假设我在所有这些模型中都有一些记录。 产品类别的当前状态如下: id | category_id | product_id ----------------------------- 5 | 2 | 2 6 | 3 | 3 7 | 4 | 1 现在,我将运行以下函数以使用Elount更新我的记录: 如果出现以下情况,此功能将正常工作: 您正在向表中添加新类

目前,我在Laravel 5.5上有3个雄辩的模型

产品

产品类别

类别

假设我在所有这些模型中都有一些记录。 产品类别的当前状态如下:

id | category_id | product_id
-----------------------------
5  | 2           | 2
6  | 3           | 3
7  | 4           | 1
现在,我将运行以下函数以使用Elount更新我的记录:

如果出现以下情况,此功能将正常工作:

您正在向表中添加新类别 您正在编辑其他值的现有类别 如果出现以下情况,此功能将不起作用:

您不是在添加或编辑,而是在从数组中删除类别 我的问题:当我编辑表Product_Category中的类别时,如果我的类别比以前少,但需要删除这些类别,我将保留以前列出的旧ID

我的问题:我如何解决这个问题?因此,表Product_类别将始终仅使用数组中的最新id进行更新


在执行函数之前,我已经考虑过删除,但不确定这是否是一种雄辩的方式

雄辩的方式是按此处所述分离记录


从上面的结构来看,类别和产品之间的关系似乎是多对多的

适当的雄辩结构将是:

类别模型 产品模型 产品类别模型 应在产品类别模型中编写以下代码:


我必须使用Laravel同步方法

foreach($request->only('categories') as $key=>$value) {
    $sync_data = [];
    for ($i = 0; $i < count($value); $i++) {
        $sync_data[$value[$i]["id"]] = ["product_id" => $model->id];
    }
    $model->categories()->sync($sync_data);
}

这将从Product_Category表中删除所有未使用的记录。并编辑相应的记录。

您能详细说明类别和产品之间的关系以及它们如何存储在产品类别中吗?谢谢,这就是我要找的。正在尝试找到特定于代码的解决方案。我正在查看sync[]
$user->roles()->detach($roleId);
public function products()
{
    return $this->belongsToMany(Product::class)->using(Product_Category::class);
}
public function categories()
{
    return $this->belongsToMany(Category::class)->using(Product_Category::class);
}
use Illuminate\Database\Eloquent\Relations\Pivot;

class Product_Category extends Pivot
{
//
}
foreach($request->only('categories') as $key=>$value) {
    $sync_data = [];
    for ($i = 0; $i < count($value); $i++) {
        $sync_data[$value[$i]["id"]] = ["product_id" => $model->id];
    }
    $model->categories()->sync($sync_data);
}