提问者:小点点

Laravel如何将一个产品插入多个类别


我尝试了,但它重复的产品,我希望保存一个产品在许多类别下的一个产品为一个product_id。这里是我的视图创建(产品)

<div class="form-group row" id="category">
                        <label class="col-md-3 col-from-label">{{translate('Category')}} <span class="text-danger">*</span></label>
                        <div class="col-md-8">
                            <select class="form-control ml-selectpicker" name="category_id" id="category_id" data-live-search="true" required>
                                @foreach ($categories as $category)
                                <option value="{{ $category->id }}">{{ $category->getTranslation('name') }}</option>
                                @foreach ($category->childrenCategories as $childCategory)
                                @include('categories.child_category', ['child_category' => $childCategory])
                                @endforeach
                                @endforeach
                            </select>
                        </div>
                    </div>

这里是我的控件(创建产品)

   /**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    $categories = Category::where('parent_id', 0)
        ->where('digital', 0)
        ->with('childrenCategories')
        ->get();

    return view('backend.product.products.create', compact('categories'));
}

和保存

$product->category_id = $request->category_id;

这里是我的模型:

 public function category()
{
    return $this->belongsTo(Category::class);
}

我相信这些函数类似于$product->categories()->sync([1,3,4]);


共1个答案

匿名用户

如果你想储存一个产品在许多类别下,那么。您必须将您的关系改为多对多(一个产品可以有许多类别,而一个类别有许多产品)。因此您必须创建三个表

  1. 产品-存储产品
  2. 类别-存储类别
  3. category_products-pivot表

那么您的模型将像下面的产品模型

 public function categories(){
     return $this->belongsToMany(Category::class);
}

类别模型

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

然后,您可以简单地使用函数sync()将产品存储在laravel中的许多类别许多对许多关系下