Я пытаюсь вернуть сущность в отношении ManyToOne, а также сделать обратное и вернуть сущности в отношении OneToMany с помощью Doctrine ORM.
Например, если у меня есть две сущности 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"
},
...
]
}
Вопрос в том, как мне сделать обратное и получить Branch, а также связанное с ним дерево, сделав вызов BranchController, чтобы результат вызова API был:
{
"id": "1",
"name": "BranchOne"
"tree": {
"id": "1",
"name": "TreeOne"
}
}
Это возможно?






Оказалось, это было проще, чем я думал. Из-за сопоставления обратное так же просто, как вызов методов установки / получения, которые сопоставляются с аннотацией Join. Так например:
public function setTree(?\Tree $tree = null): self
{
$this->tree = $tree;
return $this;
}
public function getTree(): ?Tree
{
return $this->tree;
}
Затем в функции, в которой вы возвращаете данные во внешнее клиентское приложение, вам просто нужно вызвать вышеуказанный геттер:
return array_filter([
'id' => this->getId(),
'name' => $this->getName(),
'tree' => $this->getTree()
]);
И вы получите данные в том формате, который запрошен в вопросе!