我有一个表结构,其中包含多个连接。

nodes -< node_template >- templates -< placeholder_template >- placeholder


我使用belongsToMany方法设置了节点,模板和占位符模型,以通过连接表链接主表。

例如

public function byFileMakerIdWithTemplates($id){
    return $this->node->with('templates')->where('internal_id', '=', $id)->firstOrFail();
}


有没有一种方法能够雄辩地选择多个级别的子节点?

即,有没有一种方法可以查询特定的node记录并获取template子记录和模板的placeholder记录?就像是:

public function byFileMakerIdWithTemplates($id){
    return $this->node->with('templates')->with('placeholders')->where('internal_id', '=', $id)->firstOrFail();
}


我知道我可以使用DB门面来编写mysql查询,我需要使用JOIN子句来获取所有数据,或者编写代码以查找具有所有模板的节点,然后遍历每个模板以找到占位符,但是如果有一种方法可以以多维数组的形式干净地抓取所有占位符,那就太好了。

最佳答案

您可以使用.点语法来渴望加载深度嵌套的关系:

with('relationA.relationB');


所以你会写:

public function byFileMakerIdWithTemplates($id){
    return $this->node->with('templates.placeholders')->where('internal_id', '=', $id)->firstOrFail();
}

关于php - 拥有多才多艺的 Eloquent ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27681808/

10-13 03:57