php - 通过 attach() 方法 Laravel 存储值时未知的列字段
问题描述
我想使用
attach(
) 方法存储多个复选框值。但问题是:
未找到列:1054 '字段列表'中的未知列'category_id'(SQL:插入
size_products
(category_id
,product_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();
});
解决方案
在您的产品模型中修复这些关系
public function Sizes()
{
return $this->belongsToMany(Size::class, 'size_products');
}
public function Colors()
{
return $this->belongsToMany(Color::class, 'color_products');
}