OneToMany与第三个表的引用关系?

时间:2013-03-14 14:40:10

标签: php symfony orm doctrine-orm

我有两个具有简单OneToMany关系的实体,任何东西都按预期工作。

用户实体:

class User {
    /**
     * @ORM\OneToMany(targetEntity="Vita", mappedBy="owner")
     */
}

和vita实体:

class Vita {
    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="vitas")
     */
}

到目前为止,这么好。但现在我改变了vita实体并添加了具有OneToOne关系的元实体。该实体知道所有者和其他东西,但vita不再拥有所有者财产。

我正在寻找的是使用第三张桌作为参考的机会。有共同的学说方式吗?那样的东西?

class User {
    /**
     * @ORM\OneToMany(targetEntity="Vita", mappedBy="meta.owner")
     */
}

编辑:

User
- id
- username
- password

Vita
- id
- meta_id
- [other fields]

Meta
- id
- owner_id (User)
- modifier_id (User)
- [other fields]
  • 一个用户有很多Vita
  • One Vita有一个Meta

首先,owner_id是vita的属性,现在它已移入meta。

1 个答案:

答案 0 :(得分:0)

根据关系架构,它应如下所示:

class User {

    /**
     * @ORM\OneToMany(targetEntity="Meta", mappedBy="owner")
     */
    protected $metasOwned;

    /**
     * @ORM\OneToMany(targetEntity="Meta", mappedBy="modifier")
     */
    protected $metasModified;

}

class Vita {

    /**
     * @ORM\OneToOne(targetEntity="Meta", inversedBy="vita")
     */
    protected $meta;

}

class Meta {

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="metasOwned")
     */
    protected $owner;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="metasModified")
     */
    protected $modifier;

    /**
     * @ORM\OneToOne(targetEntity="Vita", mappedBy="meta")
     */
    protected $vita;

}

请注意,变量名称与关系的反面相关。

然后你只需运行命令

php app/console doctrine:generate:entities Your/AwesomeBundle/Entity

它将创造吸气剂和放大器你和你的定制者将会全力以赴。

Your/AwesomeBundle/Entity:真正的路径是src/Your/AwesomeBundle/Entity