I currently have 3 classes Elements
, PageElements
and Page
. The Models are below:
Pages.php
class Pages extends Model
{
public function pageElement() {
return $this->hasMany(PageElements::class, 'page_id');
}
}
PageElements.php
class PageElements extends Model
{
public function element() {
return $this->hasOne(Elements::class, 'id', 'element_id');
}
}
Elements.php
class Elements extends Model
{
//
}
All the data I need is from Elements
, I can throw the PageElements
data away, how can I convert this to use a hasManyThrough
relationship?
I would like to directly access the Elements
via $page->elements
, currently I have to do $page->elements->element
.
Am I right in thinking this should be a hasManyThrough
relationship?
My current attempt is below
public function elements() {
return $this->hasManyThrough(Elements::class, PageElements::class, 'element_id', 'id', 'id', 'page_id');
}
Though is always returns an empty dataset
It seems I did indeed have the keys mixed up as Jonas mentioned, but just not in that order. My relationship was pairing based off of the wrong id's. The following is correct
public function elements() {
return $this->hasManyThrough(Elements::class, PageElements::class, 'page_id', 'id', 'id', 'element_id');
}