Я пытаюсь разобраться в отношениях Ларавеля, но с трудом справляюсь с последней частью того, чего я пытаюсь достичь.Laravel Eloquent Relationship hasMany hasOne
Мои таблицы следующим образом:
pagetemplates
id
страницы
id
pagetemplate_id
pagetemplate_blocks
id
pagetemplate_id
pagetemplateblocks_content
id
page_id
page_template_block_id
Так при загрузке страницы из БД Мне нужно, чтобы получить его с pagetemplates, с его блоками и с содержанием.
Вот мой код до сих пор:
page.php
public function pageTemplate()
{
return $this->belongsTo('PageTemplate', 'pagetemplate_id')->with('blocks');
}
public function pagetemplateblockcontent()
{
return $this->belongsToMany('PageTemplateBlockContent', 'pagetemplateblocks_content', 'page_id', 'page_template_block_id')->withTimestamps();
}
public function pagecontent()
{
return $this->hasMany('PageTemplateBlockContent', 'page_id')->with('pagetemplateblock');
}
PageTemplate.php
public function page()
{
return $this->hasMany('Page', 'pagetemplate_id');
}
public function blocks() {
return $this->hasMany('PageTemplateBlock', 'pagetemplate_id')->orderBy('sort_order', 'asc')->with('blockcontent');
}
PageTemplateBlock.php
public function pagetemplate() {
return $this->belongsTo('PageTemplate', 'pagetemplate_id');
}
public function blockcontent() {
return return $this->hasOne('PageTemplateBlockContent');
}
PageTemplateBlockContent.php
public function pagetemplateblock()
{
return $this->belongsTo('PageTemplateBlock', 'page_template_block_id');
}
Однако, проблема с content
, если я пытаюсь это возвращает один экземпляр PageTemplateBlockContent, который является одинаковым для всех страниц. Хотя для каждой страницы должен быть другой PageTemplateBlockContent. Я не уверен, как обойти это, поэтому любые идеи были бы очень благодарны.
ОБНОВЛЕНО
Мой контроллер вызывает
$this->pageRepo->where('id', $id)->with('pageTemplate');
"pageTemplate" возвращает следующие:
return $this->belongsTo('PageTemplate', 'pagetemplate_id')->with('blocks');
"блоки" возвращает следующее:
return $this->hasMany('PageTemplateBlock', 'pagetemplate_id')->orderBy('sort_order', 'asc')->with('blockcontent');
«blockcontent» возвращает следующее:
return $this->hasOne('PageTemplateBlockContent');
Таким образом, это означает, что он никогда не ударять «pagetemplateblockcontent», который предложил создать Joost.
Каков ваш запрос/способ получения данных? – Joost
Я использую '$ this-> pageRepo-> где ('id', $ id) -> с ('pageTemplate');' – Karl
что такое '$ this-> pageRepo', пожалуйста, добавьте полный метод к вашему вопрос – Joost