Laravel 4: Eloquent 与跨模型选项的关系

Laravel 4: Eloquent relations with cross-model options

我正在尝试制作一个简单的模板系统。

我有这些型号:PageTemplateTemplatevariable

所以 PageTemplateTemplateTemplatevariables。然而,只有几个不同的Templates,但是很多Templatevariables为不同的Pages

templatevariablestable既有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;
// ...