在 zf3 中使用条令 OneToOne 关系与条件

Using doctrine OneToOne relation with condition in zf3

我想在实体 User 中使用 Doctrine 的 OneToOne 关系。 例如。用户有 2 次考试 - 第一次和纠正。所有考试都在一个 table 中,但带有标记 is_corrective。如何为一个用户的这两种类型的考试使用 OneToOne 关系?

您可以为此使用 Single Table Inheritance

1) 创建实体 FirstExam:

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="exam_table_name")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="is_corrective", type="integer")
 * @ORM\DiscriminatorMap({"0" = "FirstExam", "1" = "CorrectiveExam"})
 */
class FirstExam
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
}

2) 和实体 CorrectiveExam:

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class CorrectiveExam extends FirstExam
{

}

3)然后你可以在用户实体中定义2个关系:

/**
 * @ORM\OneToOne(targetEntity="FirstExam")
 */
private $firstExam;

/**
 * @ORM\OneToOne(targetEntity="CorrectiveExam")
 */
private $correctiveExam;

两个实体使用相同的 table,"is_corrective" 列用作鉴别器。