0

我有这种情况

我有四节课

User
profiles
Activity
Workbook

user can have many profiles based on per year. Every year diff profile
User profile will have many to many with Activities

所以会有带有 profile_id 和 activity_id 的 profile_activities 表

现在用户将为每个配置文件的每个活动执行 1 个工作簿

所以我很困惑如何在数据库中映射

我的意思是个人资料表,我可以有

class profile


@many to many
protected $activities

many to one
protected $user

但是在课堂工作簿中如何定义属于活动和个人资料关系表的外键

对于每项活动,孩子都必须完成工作簿。我该如何定义

@[one to one [PK of activity_profile table]

protected $workbook

4

1 回答 1

2

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该类与另一个类(由进入关系(外部键)。targetEntityinversedBy

/**
 * @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 Userclass is groups

现在,您可以在 db php app/console 上运行用于实体生成的教义命令,doctrine:generate:entities Acme其中Acme捆绑的名称和技巧就完成了。

mappedBy关于和的一些话inversedBy

  • 有“两个”面:倒置面和拥有面。请记住,教义只会“观察”到拥有方的变化,因此请注意将其放入正确的类中
  • 反面由mappedBy关键字标识,其值为拥有侧类的名称
  • 拥有方用inversedBy关键字标识,它的值是反面类的名称
  • manyToOne 协会总是拥有方
  • oneToMany 关联总是有反面
  • oneToOne 关系的拥有方始终是具有外部键的实体
  • 进入manyToMany关系是一样的
于 2012-07-18T07:40:31.863 回答