首页 > 解决方案 > 通过 attach() 方法 Laravel 存储值时未知的列字段

问题描述

我想使用 attach() 方法存储多个复选框值。但问题是:

未找到列:1054 '字段列表'中的未知列'category_id'(SQL:插入size_productscategory_idproduct_id)值(小,5))

我的表size_products结构是这样的(size_id, )。但不知道product_id从哪里来category_id

这是我的模型:

   //Size Model


class Size extends Model
    {

        public function Products()
        {
            return $this->belongsToMany(Product::class, 'size_products','product_id','size_id');
        }
    }


/////// Product Model


class Product extends Model
{
    public function Categories()
    {
        return $this->belongsToMany(Category::class, 'category_products');
    }
    public function Colors()
    {
        return $this->belongsToMany(Category::class, 'color_products');
    }
    public function Sizes()
    {
        return $this->belongsToMany(Category::class, 'size_products');
    }
    public function FirstImage(){
        $data = explode(',',$this->images);
        return $data[0];
    }
}

这是我的控制器:

      $product = new Product();
 $product->name= $request->input('name');
 $product->model= $request->input('model');
 $product->save();
            $product->Categories()->attach($request->input('categories_id'));
            foreach ($request->sizes as $size){
                $product->Sizes()->attach($size);
            }
            foreach ($request->colors as $color){
                $product->Colors()->attach($color);
            }

数据库:

Schema::create('size_products', function (Blueprint $table) {
    $table->increments('id');

    $table->integer('product_id')->unsigned();
    $table->foreign('product_id')->references('id')->on('products')->onUpdate('cascade')->onDelete('cascade');

    $table->integer('size_id')->unsigned();
    $table->foreign('size_id')->references('id')->on('sizes')->onUpdate('cascade')->onDelete('cascade');
    $table->timestamps();
});

标签: phpdatabaselaraveleloquent

解决方案


在您的产品模型中修复这些关系

public function Sizes()
{
    return $this->belongsToMany(Size::class, 'size_products');
}

public function Colors()
{
    return $this->belongsToMany(Color::class, 'color_products');
}

推荐阅读