Формирование сложных отношений в Ларавел 5 - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над сложным проектом корзины покупок.У меня есть такие отношения

Модель GroupGroup

// 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 Ответ

0 голосов
/ 26 ноября 2018

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]
        );
    }
}
...