mysql - 使用 Doctrine ORM ManyToOne Relationship 在相反方向获取实体

标签 mysql orm annotations doctrine mapping

我想要完成的是返回 ManyToOne 关系中的一个实体,然后使用 Doctrine ORM 返回 OneToMany 关系中的实体。

例如,如果我有两个实体 TreeBranch,使用 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()
]);

您将获得问题中要求的格式的数据!

关于mysql - 使用 Doctrine ORM ManyToOne Relationship 在相反方向获取实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53125736/

相关文章:

php - 从数组中获取指定行

python - 将多种食物从 JSON 写入数据库

PHP 使用 Propel

mysql - Node.js 没有很好的 ORM 来管理 MySQL 模式/迁移......所以我可以使用 SQLAlchemy 来管理它吗?

Java方法扩展而不是覆盖

mysql - 在MySQL中查找相似数据

mysql - 学说 2 多对多翻译

java - 在继承类中使用 Jackson 注释

javascript - 向 Google 烛台图表添加注释

MySQL IFNULL 问题