Laravel 4: Eloquent 与跨模型选项的关系
Laravel 4: Eloquent relations with cross-model options
我正在尝试制作一个简单的模板系统。
我有这些型号:Page
、Template
和 Templatevariable
。
所以 Page
有 Template
,Template
有 Templatevariables
。然而,只有几个不同的Templates
,但是很多Templatevariables
为不同的Pages
。
templatevariables
table既有template_id
又有page_id
,所以我知道他们属于哪个Page
我的问题是,我不知道如何使用 Eloquent 执行此操作。在 Template
模型中,如果我这样做:
public function variables() {
return $this->hasMany('Templatevariable');
}
会return全部那个Templatevariables
那个Template
,不具体到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);
}
我想这很有可能在模型中产生自动魔法,但我不知道怎么做。
谢谢!
抱歉,如果我做错了,第一次在这里发帖。
您可以使用 where()
仅检索具有所需 page_id
的变量。要么在关系中:
public function variables(){
return $this->hasMany('Templatevariable')->where('page_id', $this->page->id);
}
(如果模板 table 包含 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;
// ...
我正在尝试制作一个简单的模板系统。
我有这些型号:Page
、Template
和 Templatevariable
。
所以 Page
有 Template
,Template
有 Templatevariables
。然而,只有几个不同的Templates
,但是很多Templatevariables
为不同的Pages
。
templatevariables
table既有template_id
又有page_id
,所以我知道他们属于哪个Page
我的问题是,我不知道如何使用 Eloquent 执行此操作。在 Template
模型中,如果我这样做:
public function variables() {
return $this->hasMany('Templatevariable');
}
会return全部那个Templatevariables
那个Template
,不具体到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);
}
我想这很有可能在模型中产生自动魔法,但我不知道怎么做。
谢谢!
抱歉,如果我做错了,第一次在这里发帖。
您可以使用 where()
仅检索具有所需 page_id
的变量。要么在关系中:
public function variables(){
return $this->hasMany('Templatevariable')->where('page_id', $this->page->id);
}
(如果模板 table 包含 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;
// ...