我正在现有数据库之上实现一个新应用程序。移动应用程序正在使用现有数据库,并且由于移动应用程序是由不同的团队开发的,因此我不允许更改现有表的结构。
现有数据库有一个用户表,对于我自己的应用程序的用户,我创建了自己的表和名为PortalUser的Doctrine实体(表portal_user)。
PortalUser实体将有一个名为$ children的OneToMany关联,它引用现有的User实体。换句话说,每个PortalUser都有零个或多个子用户实体。
实现这一目标最自然的方法就是拥有这样的东西(简化):
用户(现有实体):
class User
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var PortalUser
*
* @ORM\ManyToOne(targetEntity="PortalUser", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;
}
PortalUser实体:
class PortalUser
{
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var array
* @ORM\OneToMany(targetEntity="User", mappedBy="parent")
*/
protected $children;
}
这将在现有用户表中创建一个新列“parent_id”,这是不允许的。那么是否可以使用parent_id和child_id列获得单独的链接表,相当于常规的ManyToMany链接表?如果是这样,注释会导致这样的结构?
答案 0 :(得分:0)
好的,这很令人尴尬。原来它在Doctrine文档中:
可以通过连接映射单向一对多关联 表。从Doctrine的观点来看,它只是映射为一个 单向多对多,其中一个的唯一约束 连接列强制执行一对多基数。