我正在使用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对象,该怎么办?提前谢谢。
答案 0 :(得分:0)
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个表Account
,Player
和Coach
,但单独Account
无法保留,而是会有一个标识符列+ ID链接到。所以,例如'教练' ' 3'将加入ID为3的Coach对象。
第一回答:
如果我理解正确并且密码不需要直接提供,您可以添加到$password
注释
* @ORM\Column(type="string", nullable=true)
这是你的想法吗?