@axelprox

Как получить родительские категории для текущей подкатегории в Laravel?

Имеется таблица Categories(id, parent_id, name):
Цель вывести вот такое из контроллера:
Текущий раздел:
Электроника>Компьютеры>Комплектующие>Видеокарты(мы здесь)


Соотвественно Видеокарты parent_id указывает на Комлпекутющие, они в свою очередь на Компьютеры, пока главная категория не выведет parent_id=0.

Текущую категорию получаю так
public function listCategories(Request $request)
    {
      $catID = $request->id;
      $currentCat = \App\Categories::find($catID);
      
     // Текущий путь
     echo '<h5>Текущий путь: '.$currentCat->name.'</h5>';
     }


Я так понимаю можно произвести итерацию и затем циклом вывести все верхние родителськие категории до главной.
  • Вопрос задан
  • 700 просмотров
Решения вопроса 1
@axelprox Автор вопроса
Решение найдено:

Модель:
class Categories extends Model
{
        public function parent()
        {
            return $this->belongsTo('\App\Categories', 'parent_id');
        }
        // Add this line if you want the "parents" property to be populated all the time.
        protected $appends = ['parents'];

        public function getParentsAttribute()
        {
            $collection = collect([]);
            $parent = $this->parent;
            while($parent) {
                $collection->push($parent);
                $parent = $parent->parent;
                      }

            return $collection;
        }
}


Контроллер:
$currentCat = \App\Categories::find($catID);
        $parentCats = Categories::find($catID)->parents->reverse()->push($currentCat);

          echo '<h5> Выбор раздела';
         foreach ($parentCats as $path) {
           echo ' > '.$path->name_ru;
         }
         echo '</h5>';

P.s вывожу прямо в контроллере так как к нему обращается ajax xhr(jquery).

В вызове соотвественно если хотим развернуть порядок то используем
reverse()
Если хотим добавить и текущую выбранную категорию то
push($id)

К знатокам есть вопрос, почему в моделе не выдавало что класс не найден если обращался
return $this->belongsTo('Categories', 'parent_id');

а полным путём всё ок
return $this->belongsTo('\App\Categories', 'parent_id');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы