在symfony2中的多个其他实体中使用实体

时间:2012-07-04 09:55:13

标签: symfony doctrine-orm

我是symfony2的新手

如何在多个其他实体中重新使用实体?

比如说(实际上就是这种情况)

我有一个名为CustomVar的实体

我的项目有项目,类别和产品。

我希望我的项目能够保存customvars(onetomany),而我的产品也能保存customvars(onetomany):

project 1:n customvar

product 1:n customvar

因此,在访问我的产品时,我可以访问项目级别的自定义变量,也可以访问产品级别的变量。

我假设这些都会使用相同的对象,但我如何正确地注释和使用它?

1 个答案:

答案 0 :(得分:0)

那么您希望CustomVar与Product和Project相关吗?

class CustomVar {

    /**
     * @ORM\ManyToOne(targetEntity="Project", inversedBy="customVars")
     * @ORM\JoinColumn(name="project_id", referencedColumnName="id", nullable=true)
     */
    private $project;

    /**
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="customVars")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=true)
     */
    private $product;
}

在我们的项目(或产品)中,您将拥有以下代码:

class Project {

    /**
     * @ORM\OneToMany(targetEntity="CustomVar", mappedBy="project")
     */
    private $customVars;
}

如果您的产品和项目相关,您现在可以执行$ product-> getProject() - > getCustomVars()以及$ product-> getCustomVars()并使用返回的ArrayCollections。

如果你希望它只与两个对象中的一个相关,你可以让setter检查是否设置了另一个关系(通过测试项目和产品变量),然后按照你的方式处理它(抛出异常,默默无所事事,等等。)