【问题标题】:ManyToManyToMany Symfony2多对多对多 Symfony2
【发布时间】:2014-04-22 19:19:01
【问题描述】:

我一直在尝试解决关于我在 Symfony2 (v2.3.9) 中使用三个实体设置的 Doctrine 配置的问题

假设我的应用程序的目标是管理某些人对不同培训课程的注册。我确实想将这些课程分成不同的组:A、B 和 C。

所以,我的实体是:

  • 注册
  • 课程

一个人可以报读多门课程,但不能报读不同组的同一门课。这意味着,有一些看起来像这样的表格:

-------------------------------------- |注册ID | course_id | group_id | -------------------------------------- | 1 | 1 | 1 | -------------------------------------- | 1 | 2 | 3 | --------------------------------------

到目前为止,我已经能够在 Enrollment 实体和 Course 实体之间创建多对多关系。

Enrollment.php

...
/**
 * 
 * @ORM\ManyToMany(targetEntity="Course", inversedBy="enrollments")
 * @ORM\JoinTable(name="enrollment_course",
 *      joinColumns={@ORM\JoinColumn(name="enrollment_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="course_id", referencedColumnName="id")}
 *      )
 *
 */
protected $courses;
.....

就关系而言,Course 实体看起来像这样:

Course.php
....

/**
 * 
 * @ORM\ManyToMany(targetEntity="Enrollment", mappedBy="courses")
 */

protected $enrollments;
....

这使得配置不完整。

----------------------------------------- |注册ID | course_id | ----------------------------------------- | 1 | 1 | ----------------------------------------- | 1 | 2 | -----------------------------------------

考虑到,为了完成注册,我需要课程和组的信息。我怎样才能把它翻译成 Doctrine 注释?

你有什么线索吗?

非常感谢您的帮助。

丹妮。

【问题讨论】:

  • 您可能需要一个带有一些验证规则的自定义实体,而不是直接的数据库约束规则,这就是您暗示的学说注释将完成的。话虽如此,我不确定如何通过学说编写这样的表格。

标签: symfony doctrine-orm annotations many-to-many


【解决方案1】:

你需要一个实体来加入字段。

/**
 * @ORM\Entity
 * @ORM\Table(name="base",uniqueConstraints={@ORM\UniqueConstraint(name="enrollment_course_group_idx", columns={"enrollment_id", "course_id", "group_id"})})
 */
class Base
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Enrollment")
     * @ORM\JoinColumn(name="enrollment_id", referencedColumnName="id")
     **/
    private $enrollment;

    /**
     * @ORM\ManyToOne(targetEntity="course")
     * @ORM\JoinColumn(name="course_id", referencedColumnName="id")
     **/
    private $course;

    /**
     * @ORM\ManyToOne(targetEntity="Group")
     * @ORM\JoinColumn(name="group_id", referencedColumnName="id")
     **/
    private $group;

【讨论】:

  • 谢谢,德里克。我会试着回到你身边。再次感谢您的帮助。
猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 2012-10-24
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2015-04-19
相关资源
最近更新 更多