Laravel получи всех детей под родителей - PullRequest
0 голосов
/ 01 февраля 2019

В моей базе данных есть категории, и они могут иметь дочерние категории.Категории также имеют продукты.Пример:

Category
    Sub-Category 1
      Product 1
        Sub-Sub-Category 1
            Product 2
            Product 3

Категория Модель

public function childs()
{
    return $this->hasMany('App\Category', 'parent_id', 'id');
}

public function products()
{
    return $this->belongsToMany('App\Products');
}

Мой вопрос: если я сделаю продукты $ Category->, я хочу, чтобы они дали мне все продукты.Если я сделаю $ Sub-Sub-Category-1, это даст мне продукт 2 и продукт 3. Спасибо за помощь.

1 Ответ

0 голосов
/ 01 февраля 2019

просто рекурсивный метод в соответствии с тем, что прокомментировал daven .

Это не проверено, но идея состоит в том, чтобы захватить все подкатегории и рекурсивно выбрать все их продукты.

    public function allProducts()
    {
        //call recursive method to append all children categories
        return $this->getAll([$this])
            //select category products as each item
            ->pluck('products')
            //flatten products into one dimension array
            ->flatten()
            //remove repeated products
            ->unique();
    }

    public function getAll($categories)
    {
        //appending categories array
        $append = collect();
        //walk-through input categories
        foreach ($categories as $category)
        {
            //if category has children add them to $append
            if ($category->childs()->count())
            {
                $append->merge($category->childs);
            }
        }
        //if there were children categories, also add their children to $append
        if ($append->count())
        {
            $append = $this->getAll($append);
        }
        //merge children and categories
        return $categories->merge($append);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...