готов загружать многоуровневые категории - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть таблица категорий с parent_id для хранения категорий и подкатегорий.эта категория может быть многоуровневой, что означает, что у категории могут быть подкатегории, и у каждой подкатегории могут быть подкатегории и так далее.и это динамично, поэтому количество уровней не ограничено.я определил функцию в модели категории с именем, как показано ниже:

public function childs()
{
    return $this->hasMany(Category::class, 'parent_id');
}

Теперь я хочу загружать категории с подкатегориями.код

$cats = Category::with('childs')->get();

работает отлично, но он получает только один уровень подкатегорий, и я хочу загружать все уровни.что-то вроде

$cats = Category:with('childs')->with('childs')... ->get();

есть ли способ сделать это?получить все уровни категории?если нет, как получить все уровни подкатегорий в одной коллекции без энергичной загрузки?

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Просто назовите ваши отношения в рамках ваших отношенийЯ имею в виду рекурсивно.Попробуйте этот код:

class Category extends Model
{
   public function subCategory()
   {
      return $this->hasMany(Category::class, 'parent_id')->with('subCategory');
    }
}
0 голосов
/ 18 февраля 2019

Вы можете использовать это для загрузки всех подкатегорий

class Category extends Model
{
    public function children()
    {
        return $this->hasMany($this, 'parent_id');
    }

    public function childrenTree()
    {
        return $this->children()->with('childrenTree');
    }
}
...