2015-01-28 2 views
0

간단한 템플릿 시스템을 만들려고합니다.Laravel 4 : 교차 모델 옵션과의 묵직한 관계

저는 Page, TemplateTemplatevariable입니다.

따라서 PageTemplate이고, TemplateTemplatevariables입니다. 그러나 Templates에는 몇 가지가 있지만 Pages에는 많은 숫자가 Templatevariables입니다.

template_idpage_id 테이블에 모두 Page이 속합니다.

내 문제는, 나는 이런 일을 Eloquent와 함께하는 방법을 모른다. Template 모델에서, 내가 할 경우이 :

public function variables() { 
    return $this->hasMany('Templatevariable'); 
} 

모든이의 Templatevariables가 반환 TemplatePage에 특정하지. 나는 분명히 그것을 원하지 않는다. 나는 (내 컨트롤러) 같은 것을 할 수 있도록하려면 :

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

where()을 사용하여 원하는 page_id의 변수 만 검색하면됩니다. 하나의 관계에 :

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

두 번째 솔루션은 작동이 있기 때문에 내가 할 수있는 : 쿼리 할 때

public function variables(){ return $this->hasMany('Templatevariable')->where('page_id', $this->page->id); } 

또는을 (템플릿 테이블이 page_id 포함되어있는 경우 당신은 또한 직접 ->where('page_id', $this->page_id)을 사용할 수 있습니다) 'Page' id를 직접 전달하면됩니다. 첫 번째 해법에서,'Template'이 여러개의'Pages'에 의해 사용될 수 있기 때문에'Template'이 속해있는'Page'를 알 수 없습니다. 내 말은 – Ricaz

+0

입니다. 나는 설치/쿼리가 훨씬 간단한 방법으로 수행 될 수 있다고 생각합니다. 하지만 어떻게 말할 수는 없어요 ... – lukasgeiter