Symfony 为您提供了不同的方法来执行此操作。
其中一种方法是注释。使用注释,您可以直接将这种关系和更多内容写入 php 类(如 db 列的类型,指定属性是否是必需的等等......)
所以,让我们举这个例子(因为我不了解您的实体之间的关系)
考虑两个实体:用户和组。
一个用户可以属于n 个组,一个组可以有m个用户。这意味着我们必须将mn基数“分解”成m-1-n
关系。
在 symfony 中(使用学说;我不知道使用 mongodb 和类似的是否相同)您不必将这个“中间表”创建为 php 类。您所要做的就是在涉及到 php 类的注释中指定哪些表是相关的以及以何种方式相关。
让我们看看如何!
/**
* Acme\UserBundle\Entity\User
*
* @ORM\Table(name="users")
* @ORM\Entity()
*/
class User implements AdvancedUserInterface
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
[...]
/**
* @ORM\ManyToMany(targetEntity="Groups", inversedBy="users")
*
*/
private $groups;
[...]
}
正如你所看到的,这是一个 php 类的一部分,它使用学说 (ORM) 映射到 db 表中。
该类具有一个属性,该属性告诉(查看注释)$groups
该类与另一个类(由进入关系(外部键)。targetEntity
inversedBy
/**
* @ORM\Table(name="groups")
* @ORM\Entity()
*/
class Groups implements RoleInterface
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
[...]
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="groups")
*/
private $users;
[...]
}
该实体是组实体,具有关系的“另一面”:$user
如您所见,有@ORM\ManyToMany(targetEntity="User", mappedBy="groups")
表示 realtionship 是与 classUser
和 field into User
class is groups
。
现在,您可以在 db php app/console 上运行用于实体生成的教义命令,doctrine:generate:entities Acme
其中Acme
捆绑的名称和技巧就完成了。
mappedBy
关于和的一些话inversedBy
:
- 有“两个”面:倒置面和拥有面。请记住,教义只会“观察”到拥有方的变化,因此请注意将其放入正确的类中
- 反面由
mappedBy
关键字标识,其值为拥有侧类的名称
- 拥有方用
inversedBy
关键字标识,它的值是反面类的名称
- manyToOne 协会总是拥有方
- oneToMany 关联总是有反面
- oneToOne 关系的拥有方始终是具有外部键的实体
- 进入manyToMany关系是一样的