Laravel 4 carga ansiosa y categorías, subcategorías, artículos

Hola, pensé que podía manejar esto yo mismo, pero en realidad no sé cómo morderlo.

Estoy tratando de categorizar mis progtwigs. Solo habrá 2 niveles de categorías:

1 CATEGORIA
2 | -Subcategoría

Quiero que sea lo más simple posible.
– el progtwig puede pertenecer a una sola subcategoría,
– las categorías pueden tener muchas subcategorías,
– las subcategorías pueden tener muchos progtwigs,

Por supuesto, me gustaría enumerar todos los progtwigs de las subcategorías, cuando alguien elige una categoría principal.

Tampoco estoy seguro de la estructura y relación de las tablas de mi base de datos actual en los modelos.

Tablas en la base de datos:

progtwigs : id, título, descripción, program_subcategory_id
programs_categories : id, name
programs_subcategories : id, name, program_category_id

Modelos:
Program.php

class Program extends Eloquent { protected $table = 'programs'; public function user() { return $this->belongsTo('User'); } public function subcategory() { return $this->belongsTo('ProgramSubcategory', 'program_subcategory_id'); } } 

ProgramCategory.php

 class ProgramCategory extends Eloquent { protected $table = 'programs_categories'; public function subcategories() { return $this->hasMany('ProgramSubcategory'); } } 

ProgramSubcategory.php

 class ProgramSubcategory extends Eloquent { protected $table = 'programs_subcategories'; public function programs() { return $this->hasMany('Program'); } public function category() { return $this->belongsTo('ProgramCategory'); } } 

Controladores reales:
ProgramsController.php

 class ProgramsController extends BaseController { public function index() { $programs = Program::with('subcategory')->orderBy('programs.id', 'desc')->paginate(5); $acategories = ArticleCategory::All(); $pcategories = ProgramCategory::All(); return View::make('programs.index', compact('programs', 'acategories', 'pcategories')); } } 

ProgtwigsSubcatecories.php

 class ProgramsSubcategories extends BaseController { public function index($cname) { $programs = ProgramSubcategory::whereAlias($cname)->first()->programs()->orderBy('id', 'DESC')->paginate(10); $pcategories = ProgramCategory::All(); $scategories = ProgramSubcategory::All(); $acategories = ArticleCategory::All(); return View::make('programs.index', compact('programs', 'pcategories', 'scategories ', 'acategories')); } public function show($cname, $id) { $category = ProgramSubcategory::whereAlias($cname)->first(); $program = $category->programs()->findOrFail($id); $pcategories = ProgramCategory::All(); $acategories = ArticleCategory::All(); return View::make('programs.show', compact('program', 'category', 'pcategories', 'scategories ', 'acategories')); } } 

No es un problema para mí enumerar todos los artículos de una categoría con una carga ansiosa. Pero tengo un problema de cómo hacerlo con categorías de 2 niveles.

Por favor, aconseje cómo comenzarlo.

No está buscando una eager loading , necesita resolver cómo administrar datos jerárquicos en su base de datos.

El modelo de conjuntos nesteds cumple esta función muy bien. Deberías leer alguna teoría en Wiki: http://en.wikipedia.org/wiki/Nested_set_model

Afortunadamente, ya hay implementaciones Eloquent.
Por mencionar algunos:
– Baum (el mejor gratis, imho), https://github.com/etrepat/baum
– Laravel Nested Set, https://github.com/atrauzzi/laravel-nested-set
– Laravel4-nestedset, https://github.com/lazychaser/laravel4-nestedset

y el pagado (seguramente la más alta calidad también)
de la compañía Cartalyst – https://cartalyst.com/manual/nested-sets