Laravel 5 中的复杂关系形成

Posted

技术标签:

【中文标题】Laravel 5 中的复杂关系形成【英文标题】:Complex relationship formation in Laravel 5 【发布时间】:2019-04-27 13:35:59 【问题描述】:

我正在处理一个复杂的购物车项目。我有这样的关系

类别组模型

// App\CategoryGroup

class CategoryGroup extend Model 


    public function categories()
    
        return $this->hasMany(Category::class);
    

类别模型

// App\Category

class Inventory extend Model 


    public function categoryGroup()
    
        return $this->belongsTo(CategoryGroup::class);
    


    public function products()
    
        return $this->belongsToMany(Product::class);
    


    public function listings()
    
        return $this->belongsToMany(
                                   Inventory::class, 
                                   'category_product', 
                                   null,
                                   'product_id',
                                   null,
                                   'product_id'
        );
    


产品型号

// App\Product

class Product extend Model 

    public function categories()
    
        return $this->belongsToMany(Category::class);
    

    public function listings()
    
        return $this->hasMany(Inventory::class);
    

库存模型

// App\Inventory

class Inventory extend Model 


    public function products()
    
        return $this->belongsTo(Product::class);
    

现在我被困在需要像这样在 CategoryGroups 和 Inventory 模型之间创建关系的情况:

// App\CategoryGroup

class CategoryGroup extend Model 


    public function categories()
    
        return $this->hasMany(Category::class);
    


    public function listings()
    
        // Can't figured out the way
        // A belongsToMany like the App\Category would be great
    


有没有什么好的方法可以实现这种关系?

【问题讨论】:

【参考方案1】:

Laravel 不支持直接关系。

我为这样的案例创建了一个包:https://github.com/staudenmeir/eloquent-has-many-deep

你可以这样使用它:

class CategoryGroup extends Model 
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function inventories() 
        return $this->hasManyDeep(
            Inventory::class,
            [Category::class, 'category_product', Product::class]
        );
    

【讨论】:

以上是关于Laravel 5 中的复杂关系形成的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 检索嵌套关系中的第一条记录

Laravel 5中的反向多态关系

Laravel 5.5中的一对多关系

Laravel 复杂的雄辩关系

Laravel 5.3 多态关系

如何在laravel 5中的关系列上使用“有”和分页