我试图建立一个简单的模板系统。
我有以下模型:Page
,Template
和Templatevariable
。
因此Page
有一个Template
,Template
有Templatevariables
。但是,对于不同的Templates
,只有少数不同的Templatevariables
,但很多Pages
。
templatevariables
表同时包含template_id
和page_id
,因此我知道它们属于哪个Page
。
我的问题是,我不知道如何用Eloquent做到这一点。在Template
模型中,如果我这样做:
public function variables() {
return $this->hasMany('Templatevariable');
}
它将返回所有 Templatevariables
Template
的{{1}},而不是Page
。我显然不想要那个。我希望能够做这样的事情(在我的控制器中):
public function show($id) {
$page = Page::find($id)
$template = $page->template;
foreach($template->variables as $variable)
$data[$variable->name] = $variable->value;
$data['page'] = $page;
return View::make($template->view, $data);
}
我想这很可能在模型中实现自动化,但我无法弄清楚如何。
谢谢!
很抱歉,如果我这样做不正确,请先在此处发帖。
答案 0 :(得分:0)
您只需使用page_id
检索具有所需where()
的变量即可。在关系中:
public function variables(){
return $this->hasMany('Templatevariable')->where('page_id', $this->page->id);
}
(如果模板表包含page_id
,您也可以直接使用->where('page_id', $this->page_id)
或查询时:
$template = $page->template;
$variables = $template->variables()->where('page_id', $id)->get();
foreach($variables as $variable)
$data[$variable->name] = $variable->value;
// ...