Получение сущностей в обратном направлении с помощью Doctrine ORM ManyToOne Relationship

Я пытаюсь вернуть сущность в отношении 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"
        }
}

Это возможно?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказалось, это было проще, чем я думал. Из-за сопоставления обратное так же просто, как вызов методов установки / получения, которые сопоставляются с аннотацией 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()
]);

И вы получите данные в том формате, который запрошен в вопросе!

Другие вопросы по теме