我试图在表之间创建一个简单的关系:
- attribute_type_category -
attribute_type_id
category_id
所以我创建了一个数据透视表来链接它们:
public function category() {
return $this->belongsToMany('App\AttributeTypeCategory', 'attribute_type_category', 'attribute_type_id', 'category_id');
}
有模型关系:
在AttributeType.php上
public function category() {
return $this->belongsToMany('App\Category');
}
在AttributeTypeCategory.php上
attribute_type_category
一切似乎没问题,但我收到以下错误:
你知道吗? 谢谢!SQLSTATE [42000]:语法错误或访问冲突:1066不唯一 table / alias:' attribute_type_category' (SQL:选择
attribute_type_category
。*,attribute_type_id
。pivot_attribute_type_id
为attribute_type_category
,category_id
。pivot_category_id
为 来自attribute_type_category
内部联接的attribute_type_category
attribute_type_category
上的id
。attribute_type_category
=category_id
。attribute_type_category
其中attribute_type_id
。{{1}} = 1)
答案 0 :(得分:2)
当你想在两个表之间创建简单的多对多关系时 像attribute_type和category一样 您应该像使用迁移一样创建三个表 - attribute_type - ID 名称
类别 - ID 名称 描述
attribute_type_category - attribute_type_id CATEGORY_ID
然后你将创建两个类(attribute_type和category),不需要为关系创建第三个类。
并且在attribute_type中,您应该定义类别关系的方法
public function category() {
return $this->belongsToMany('App\Category');}
和类别类: -
public function attributeType() {
return $this->belongsToMany('App\AttributeType');}
然后您可以使用 - >类别访问任何attribute_type的类别 并且您可以使用 - > attributeTypes
访问任何类别的attributeTypes您应该遵循laravel官方文档来了解有关关系的更多信息 https://laravel.com/docs/5.4/eloquent-relationships