Laravel很多很多剩余的id要删除

时间:2017-10-25 17:23:03

标签: laravel laravel-5

目前我在 Laravel 5.5

雄辩中有3个模型

产品

PRODUCT_CATEGORY

分类

让我们说我在所有这些模型中都有一些记录。  Product_Category的当前状态将如下所示:

id | category_id | product_id
-----------------------------
5  | 2           | 2
6  | 3           | 3
7  | 4           | 1

现在我将运行以下函数来使用Eloquent更新我的记录:

public function updateObject($request, $id){
    $model = Product_Category::find($id);
    foreach($request->except('_token', 'categories') as $key=>$value){
        $model->setAttribute($key, $value);
    }
    $model->save();
    $model->id;

    foreach($request->only('categories') as $key=>$value){
        foreach($value as $category) {
            $product_category = Product_Category::where(['category_id' => $category["id"], 'product_id' => $model->id])->first();
            if($product_category == null) {
                $product_category = new Product_Category();
                $product_category->category_id = $category["id"];
                $product_category->product_id = $model->id;
            } else {
                $product_category->category_id = $category["id"];
                $product_category->product_id = $model->id;
            }
            $product_category->save();
        }
    }
}

如果符合以下条件,此功能可以正常工作:

  • 您正在向表中添加新类别
  • 您正在为其他值编辑现有类别

如果符合以下条件,则此功能无效:

  • 您要么不添加或编辑,要么从阵列中删除类别

我的问题:当我从表Product_Category中编辑类别时,如果我的类别比之前少,那么我将保留之前列出的旧ID,但这些需要删除。

我的问题:我该如何解决这个问题?因此表Product_Category将始终仅使用数组中的最新ID进行更新

我在执行该功能之前已经考虑过删除,但不确定这是否是" Eloquent方式"

3 个答案:

答案 0 :(得分:1)

雄辩的方法是分离记录https://laravel.com/docs/5.5/eloquent-relationships

$user->roles()->detach($roleId);

答案 1 :(得分:0)

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

正确的雄辩结构将是:

类别模型

 Illuminate\Database\QueryException]
  could not find driver (SQL: select * from information_schema.tables where table_schema = test and table_name = migrations)


  [PDOException]
  could not find driver

产品型号

public function products()
{
    return $this->belongsToMany(Product::class)->using(Product_Category::class);
}

Product_Category模型

以下代码应写在public function categories() { return $this->belongsToMany(Category::class)->using(Product_Category::class); } 模型中:

Product_Category

答案 2 :(得分:0)

我必须使用Laravel Sync方法。

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表中删除所有未使用的记录。并编辑相应的记录。