Показване на 3 нива категории

vinsbg

Registered
Някой може ли да помогне със следното. Имам следните таблици.
category с полета
Код:
category_id
category_name
таблица sub_category с полета
Код:
sub_cat_id
sub_cat_name
category_id
Таблица dual_sub_category с полета
Код:
dual_sub_cat_id
dual_sub_cat_name
sub_cat_id
Модела за category таблицата
Код:
class Categories extends Eloquent {
    protected $table = 'category';
    protected $primaryKey = 'category_id';
    public $timestamps = false;

    public function subcategories()
    {
        return $this->hasMany('SubCategories', 'category_id');
    }   
}
SubCategories модел
Код:
class SubCategories extends Eloquent {
    protected $table = 'sub_category';
    protected $primaryKey = 'sub_cat_id';
    public $timestamps = false;
    
    public function category()
    {
        return $this->belongsTo('Category', 'category_id');
    }
    
}
DualSubCategories модел
Код:
class DualSubCategories extends Eloquent {
    protected $table = 'dual_sub_category';
    protected $primaryKey = 'dual_sub_cat_id';
    public $timestamps = false;
    
    public function subcategory()
    {
        return $this->belongsTo('SubCategories', 'sub_cat_id', 'sub_cat_id');
    }
   
}

Дайте идея как мога да изведа на страницата всички Главни категории с техните под-категории и под категориите на под категориите :D

Пример:

1. Категория 1
1.1. Под категория 1 на Категори 1
1.1.1 Под-Под категория на Под Категория 1
2. Категория 2
2.1. Под категория 2 на Категори 2
2.1.1. Под-Под категория на Под Категория 2

Framework - LARAVEL 4.2. Благодаря
 
Fakeheal каза:
Това може да го направиш само с една таблица с полета: id, name, parent_id и https://github.com/lazychaser/laravel-nestedset .
Виждах го и това, но проблема е, че ще си отворя страшно много работа ако трябва да го ползвам.
 
Не ти трябват толкова таблици. Помисли как ще стане с една таблица, както ти предложи @Fakeheal. Цялата идея е, че трябва да пазиш id на родителския запис(категория).


PHP:
category_id        |         name           |           parent_id
      1            |         Main Cat       |               -
      2            |         Sub Cat        |               1
      3            |         Sub Sub Cat    |               2
 
Да, но ако започна да го преправям по този начин трябва да пренапиша доста страници и да преправям базата, което няма как да стане.. та мислех за някакъв по-бърз начин... дори и да не е толкова ефективен.
 
Много не ми се отговаряше на тази тема, защото причината за това издевателство не е много оправдаваща, но...

Промени този модел:
Код:
class SubCategories extends Eloquent {
  protected $table = 'sub_category';
  protected $primaryKey = 'sub_cat_id';
  public $timestamps = false;
  
  public function category()
  {
      return $this->belongsTo('Category', 'category_id');
  }

  //Добавено:
  public function dualsubcategory(){
    return $this->hasMany('DualSubCategory', 'dual_sub_category.sub_cat_id', 'sub_category.sub_cat_id');
  }
  
}

И после пробвай така:
Код:
$categories = Category::all();
echo '<ol>';
if($categories as $category) {
  echo '<li>';
  echo $category->category_name;
  if(!$category->subcategories->isEmpty())
  {
    echo '<ol>';
    foreach($category->subcategories as $subcategory) {
      echo '<li>';
      echo $subcategory->sub_cat_name;
      if(!$subcategory->dualsubcategory->isEmpty()) {
        echo '<ol>';
        foreach($category->dualsubcategory as $dualsubcategory) {
            echo '<li>'. $dualsubcategory->dual_sub_cat_name.'</li>';
        }
        echo '</ol>';
      }
      echo '</li>';
    }
    echo '</ol>';
  }
  echo '</li>';
}

echo '</ol>';
die();

PS: Не е тествано, дори синтактични грешки може да има :D
 
Все пак мерси за отговора.. излиза това:
Код:
FatalErrorException: Uncaught TypeError: Argument 1 passed to Illuminate\Exception\PlainDisplayer::display() must be an instance of Exception, instance of Error given,

Забелязах и една малка грешка тук
Код:
if($categories as $category) {
Мисля, че трябва да е
Код:
foreach($categories as $category) {
но грешката си остава
 
Подкарах го до второто ниво. Дъни се на foreach-a, който изкарва третото ниво. Така изглежда в момента:
Код:
<ol>
@foreach($categories as $category) 
<li>
  {{ $category->category_name }}
  @if(!$category->subcategories->isEmpty())
	<ol>
		@foreach($category->subcategories as $subcategory)
			<li>
				{{ $subcategory->sub_cat_name }}
				@if(!$subcategory->dualsubcategory->isEmpty())
					<ol>
						@foreach($category->dualsubcategory as $dualsubcategory) 
							<li> {{ $dualsubcategory->dual_sub_cat_name }}</li>
						@endforeach
					</ol>
				@endif
			</li>
		@endforeach
	</ol>
  @endif
</li>

@endforeach
</ol>

Проблемната част е тази
Код:
				@if(!$subcategory->dualsubcategory->isEmpty())
					<ol>
						@foreach($category->dualsubcategory as $dualsubcategory) 
							<li> {{ $dualsubcategory->dual_sub_cat_name }}</li>
						@endforeach
					</ol>
				@endif
Като я махна и показва коректно Category и Sub Category

едит: Проблема беше в модела. Въпреки това не ми показва третото ниво. Това е празно: {{ $dualsubcategory->dual_sub_cat_name }}
 

Back
Горе