我有一个包含多个多对多联接的表结构。
nodes -< node_template >- templates -< placeholder_template >- placeholder
我使用belongsToMany
方法设置节点,模板和占位符模型,以通过连接表链接主表。
e.g。
public function byFileMakerIdWithTemplates($id){
return $this->node->with('templates')->where('internal_id', '=', $id)->firstOrFail();
}
有没有办法用eloquent选择多级子节点?
即,有没有办法可以查询特定的node
记录并获取template
子记录和模板的placeholder
记录?类似的东西:
public function byFileMakerIdWithTemplates($id){
return $this->node->with('templates')->with('placeholders')->where('internal_id', '=', $id)->firstOrFail();
}
我知道我可以使用DB
Facade来编写mysql查询,我需要使用JOIN
子句获取所有数据,或者编写代码来查找包含所有数据的节点&# 39; s模板,然后通过每个模板预先找到占位符,但是如果有一种方法可以在多维数组中干净地抓取它,那将是非常棒的。
答案 0 :(得分:0)
您可以使用.
点语法来急切加载深层嵌套关系:
with('relationA.relationB');
所以你会写:
public function byFileMakerIdWithTemplates($id){
return $this->node->with('templates.placeholders')->where('internal_id', '=', $id)->firstOrFail();
}