我试图显示与产品相关的产品颜色,我已经在数据库中建立了一个关联表,我只想知道当我单击特定产品时,将显示与该产品相关的颜色。谢谢
我面临错误该如何解决? https://flareapp.io/share/VmeXLq5Q#F56
有人有主意吗?
product_color模型
class Product_color extends Model
{
public function products()
{
return $this->belongsToMany('App\Product', 'available_product_color', 'product_color_id',
'product_id');
}
}
产品型号
class Product extends Model
{
public function sizes()
{
return $this->belongsToMany('App\Product_sizes', 'available_product_sizes', 'product_id',
'product_size_id');
}
public function color()
{
return $this->belongsToMany('App\Product_color', 'available_product_color', 'product_id',
'product_color_id');
}
}
控制器
public function single_product($product_slug)
{
$single_product = Product::with('sizes','color')->where('product_slug',$product_slug)->first();
return view('front_end/single_product',compact('single_product'));
}
}
HTML观看
<div class="form-group product__option">
<label class="product__option-label">Color</label>
<div class="input-radio-color">
<div class="input-radio-color__list">
@foreach($single_product->color as $color)
<span><img src="{{$color->color_image}}"></span>
@endforeach
</div>
</div>
</div>
答案 0 :(得分:1)
在为您的班级命名时,我强烈建议您坚持使用驼峰式外套。这是一个非常好的约定,对您有所帮助。因此理想情况下,Product_color
应该为ProductColor
或至少为Product_Color
。这也有助于laravel轻松找到相关信息。根据laravel约定,您的数据透视表应按字母顺序命名,因此字母C
位于P
之前,因此应命名为ColorProduct
,否则请在模型中指定表的名称
class Product_color extends Model
{
protected $table = 'available_product_color ??';
public function products()
{
return $this->belongsToMany(
'App\Product',
'available_product_color',
'product_color_id',
'product_id'
);
}
}
这是文档的链接。 https://laravel.com/docs/6.x/eloquent-relationships#many-to-many