0

我得到了两个具有简单 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 中。

4

1 回答 1

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

它将为您创建 getter 和 setter,您将万事俱备。

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

于 2013-03-14T18:59:32.523 回答