在第三个表上有引用的OneToMany关系


OneToMany Relation with reference on a third table?

我得到了两个具有简单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
  • 一个Vita有一个Meta

首先owner_id是vita的属性,现在它移到了meta.

根据关系模式,它应该是这样的:

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

,它会创建getter &设置你,你将所有设置。

Your/AwesomeBundle/Entity:真实路径是或可能是src/Your/AwesomeBundle/Entity