Laravel - 1066关系中不是唯一的表/别名

时间:2017-04-20 19:05:41

标签: php sql laravel eloquent relationship

我试图在表之间创建一个简单的关系:

- 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_idpivot_attribute_type_id为   attribute_type_categorycategory_idpivot_category_id为   来自attribute_type_category内部联接的attribute_type_category   attribute_type_category上的idattribute_type_category =   category_idattribute_type_category其中   attribute_type_id。{{1}} = 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