【问题标题】:use entity in multiple other entities in symfony2在 symfony2 的多个其他实体中使用实体
【发布时间】:2012-07-04 09:55:13
【问题描述】:

我是 symfony2 的新手

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

比如说(其实是这样的)

我有一个名为 CustomVar 的实体

我的项目有项目、类别、产品。

我希望我的项目包含 customvars (onetomany) 并且我的产品也包含 customvars (onetomany):

project 1:n customvar

product 1:n customvar

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

我假设它们都使用同一个对象,但我如何正确注释和使用它?

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    所以您希望 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。

    如果您希望它仅与两个对象之一相关,您可以让设置器检查是否设置了另一个关系(通过测试项目和产品变量),然后按您的方式处理它(抛出异常,默默地什么都不做,并且等等)。

    【讨论】:

    • 产品对类别是多对一的,而对你的例子来说类别是多对一的,这几乎正是我现在所拥有的。但我想知道的是:一个特定的 customvar 附加到一个项目或一个产品,而不是两者,这会导致任何问题,我有什么需要注意的吗? (这就是你在第二段中所说的不?如果是这样,你能给我解释一下吗?)
    猜你喜欢
    • 2013-03-28
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多