Templates Laravel 4:与跨模型选项的雄辩关系

Templates Laravel 4:与跨模型选项的雄辩关系,templates,laravel,eloquent,Templates,Laravel,Eloquent,我正在尝试制作一个简单的模板系统 我有以下模型:页面、模板和模板变量 所以一个页面有一个模板,该模板有Templatevariables。但是,只有少数几个不同的模板,但不同页面有许多模板变量 templatevariables表有一个模板id和一个页面id,所以我知道它们属于哪个页面 我的问题是,我不知道如何做到这一点与雄辩。在模板模型中,如果执行以下操作: public function variables() { return $this->hasMany('Template

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

我有以下模型:页面、模板和模板变量

所以一个页面有一个模板,该模板有Templatevariables。但是,只有少数几个不同的模板,但不同页面有许多模板变量

templatevariables表有一个模板id和一个页面id,所以我知道它们属于哪个页面

我的问题是,我不知道如何做到这一点与雄辩。在模板模型中,如果执行以下操作:

public function variables() {
    return $this->hasMany('Templatevariable');
}
它将返回该模板的所有Templatevariables,而不是特定于页面的。我显然不想那样。我希望能够在控制器中执行以下操作:

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);
}
我想这是非常有可能使automagic在模型中,但我不知道如何

谢谢


很抱歉,如果我做得不正确,请第一次在这里发布。

您可以使用where仅检索具有所需页面id的变量。在关系中:

public function variables(){
    return $this->hasMany('Templatevariable')->where('page_id', $this->page->id);
}
如果模板表包含页面id,您也可以直接使用->where'page\u id',$this->page\u id

或在查询时:

$template = $page->template;
$variables = $template->variables()->where('page_id', $id)->get();
foreach($variables as $variable)
    $data[$variable->name] = $variable->value;
// ...

第二种解决方案有效,因为我可以直接传递页面id。在第一个解决方案中,我不知道模板属于哪个页面,因为该模板可能被多个页面使用。我明白了。我猜设置/查询可以用更简单的方式完成。但我真的不知道怎么。。。