mysql - 使用 Doctrine ORM ManyToOne 关系在相反方向获取实体
问题描述
我想要完成的是在 ManyToOne 关系中返回一个实体,并执行相反的操作并使用 Doctrine ORM 返回 OneToMany 关系中的实体。
例如,如果我有两个实体Tree
和Branch
,使用 Doctrine 映射来查询特定树并获取其分支列表是相当简单的(其中关系是一棵树 -> 许多分支)
树实体
/**
* @ORM\OneToMany(targetEntity="Branches", mappedBy="tree_id")
*/
protected $branches;
分公司
/**
* @ORM\ManyToOne(targetEntity="Branches", inversedBy="tree")
* @ORM\JoinColumn(name="tree", referencedColumnName="id")
*/
protected $tree;
在此示例中,当我在 TreeController 上查询时,我以以下格式返回 JSON:
{
"id": "1",
"name": "TreeOne"
"branches": [
{
"id": "1",
"name": "BranchOne"
},
{
"id": "1",
"name": "BranchTwo"
},
...
]
}
问题是,我如何做相反的事情并通过调用 BranchController 来获取分支及其关联的树,以便调用 API 的结果是:
{
"id": "1",
"name": "BranchOne"
"tree": {
"id": "1",
"name": "TreeOne"
}
}
这可能吗?
解决方案
事实证明这比我想象的要容易。由于映射,反向操作就像调用映射到 Join 注释的 setter/getter 一样简单。例如:
public function setTree(?\Tree $tree = null): self
{
$this->tree = $tree;
return $this;
}
public function getTree(): ?Tree
{
return $this->tree;
}
然后在将数据返回到前端客户端应用程序的函数中,您必须简单地调用上面的 getter:
return array_filter([
'id' => this->getId(),
'name' => $this->getName(),
'tree' => $this->getTree()
]);
您将获得问题中要求的格式的数据!