嗨我以为我可以自己处理,但实际上我不知道如何咬它。
我正在尝试对我的程序进行分类。只有两个级别的类别:
1类别
2 | -Subcategory
我希望它尽可能简单
- 程序只能属于一个子类别,
- 类别可以有许多子类别,
- 子类别可以有很多程序,
当然,当有人选择主要类别时,我想列出子类别中的所有程序。
我也不确定我当前的数据库表结构和模型中的关系。
数据库中的表:
程序:id,title,description,program_subcategory_id
programs_categories :id,name
programs_subcategories :id,name,program_category_id
型号:
的 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');
}
}
实际控制器:
的 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'));
}
}
ProgramsSubcatecories.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'));
}
}
通过急切加载列出一个类别的所有项目对我来说不是问题。但我有问题如何使用2级别的类别。
请告知如何启动它。
答案 0 :(得分:1)
您不是在寻找eager loading
,而是需要解决如何管理数据库中的分层数据。
嵌套集模型可以很好地实现此目的。您应该阅读Wiki上的一些理论:http://en.wikipedia.org/wiki/Nested_set_model
幸运的是,已经有雄辩的实施
提一下:
- 鲍姆(最好的免费,imho),https://github.com/etrepat/baum
- Laravel Nested Set,https://github.com/atrauzzi/laravel-nested-set
- Laravel4-nestedset,https://github.com/lazychaser/laravel4-nestedset
和付费的(当然也是最高质量)
来自Cartalyst公司 - https://cartalyst.com/manual/nested-sets