laravel雄辩的渴望加载两个pivot表

wlwcrazw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(379)

我正在尝试加载一个属性,该属性通过一个组和另一个表拼接而成,另外还有一个相关的pivot。以下是表格:

Categories
--------------------
id

Attributes
--------------------
id
attribute_set_id

Attribute_Groups
----------------------------
id

Categories_Attribute_Groups
-----------------------------
category_id
attribute_group_id

Categories_Additional_Attributes
-----------------------------
category_id
attribute_id

Class Category extends eloquent
{

    // how to achieve this
    public function attributes()
    {
        // all attributes that can be eager load
    }
}

我怎样才能获得类别模型中的所有属性,并能够立即加载它们?

cwdobuhd

cwdobuhd1#

在类别模型中,可以定义两个关系 belongsToMany 带属性和属性组

Class Category extends eloquent
{

    public function attributes()
    {
        return $this->belongsToMany(Attribute::class, 'Categories_Additional_Attributes', 'category_id');
    }

    public function attribute_groups()
    {
        return $this->belongsToMany(AttributeGroups::class, 'Categories_Attribute_Groups', 'category_id');
    }
}

现在你可以把它们当作

Category::with(['attributes', 'attribute_groups'])->get();

对于双向Map,可以将其定义为

Class Attribute extends eloquent
{

    public function categories()
    {
        return $this->belongsToMany(Category::class, 'Categories_Additional_Attributes', 'attribute_id');
    }
}

Class AttributeGroups extends eloquent
{

    public function categories()
    {
        return $this->belongsToMany(Category::class, 'Categories_Attribute_Groups', 'attribute_group_id');
    }
}

相关问题