在 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" 列用作鉴别器。
我想在实体 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" 列用作鉴别器。