学说摘要 - 具体类ORM

时间:2016-12-10 02:17:40

标签: orm doctrine abstract-class symfony

我正在使用doctrine来将一些对象映射到数据库表。 这就是我现在所拥有的:

将Doctrine \ ORM \ Mapping用作ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="account")
 */
abstract class Account{
   /**
   * @ORM\Id
   * @ORM\Column(type="string")
   */
   private $username;

   /**
   * @ORM\Id
   * @ORM\Column(type="string")
   */
   private $password;

   /*Getters and setters*/
}

 /**
 * @ORM\Entity
 * @ORM\Table(name="player")
 */
abstract class Player extends Account{

   /**
   * @ORM\Id
   * @ORM\Column(type="integer")
   */
   private $number;

   /*Getters and setters*/
}


 /**
 * @ORM\Entity
 * @ORM\Table(name="coach")
 */
abstract class Coach extends Account{

   /**
   * @ORM\Id
   * @ORM\Column(type="integer")
   */
   private $experience;

   /*Getters and setters*/
}

这样,所有具体的类都将具有用户名和密码列,如果我只需要存储用户名以便以后能够加入它们并获得oconcrete对象,该怎么办?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您想要的可能是http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#class-table-inheritance

中描述的类表继承

namespace MyProject\Model;

/**
 * @Entity
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"player" = "Player", "coach" = "Coach"})
 */
abstract class Account
{
    // ...
}

/** @Entity */
class Player extends Account
{
    // ...
}

/** @Entity */
class Coach extends Account
{
    // ...
}

这应创建3个表AccountPlayerCoach,但单独Account无法保留,而是会有一个标识符列+ ID链接到。所以,例如'教练' ' 3'将加入ID为3的Coach对象。

第一回答: 如果我理解正确并且密码不需要直接提供,您可以添加到$password注释

 * @ORM\Column(type="string", nullable=true)

这是你的想法吗?