我应该使用哪种学说协会?

时间:2014-11-06 22:29:42

标签: php doctrine-orm

我有两张桌子:

CREATE TABLE server (
     serverId INT
)

CREATE TABLE resource (
     resourceId INT AUTO_INCREMENT NOT NULL,
     serverId INT NOT NULL
)

ALTER TABLE resource ADD FOREIGN KEY (serverId) REFERENCES server(serverId);

在我的server实体中,我想getResourceList()返回资源实体列表。

对此有什么正确的注释,为什么?

由于

1 个答案:

答案 0 :(得分:0)

我想您希望将Doctrine2与PHP注释一起使用。您的表可以按如下方式重写:

带有注释的服务器类:

/**
 * @Id @Column(type="integer")
 * @GeneratedValue
 */
private $id;

/**
 * @var Doctrine\Common\Collections\ArrayCollection
 * @OneToMany(targetEntity="Resource", mappedBy="server")
 */
private $resources;

public function getId() {
    return $this->id;
}

public function getResources() {
    return $this->resources;
}

public function addResource(Resource $resource){
    $this->resources->add($resource);
}

public function removeResource(Resource $resource){
    $this->resources->removeElement($resource);
}

带有注释的资源类:

/**
 * @Id @Column(type="integer")
 * @GeneratedValue
 */
private $id;

/**
 * @var Server
 * @ManyToOne(targetEntity="Resource", inversedBy="resources")
 */
private $server;

public function getId() {
    return $this->id;
}

public function getServer() {
    return $this->server;
}

public function setServer(Server $server) {
    $this->server = $server;
}

有一个"一对多"服务器端的关联,因为您将许多资源映射到一台服务器。在这种关系的另一边 - 逻辑上 - 必须有一个多对一的"协会。

现在,在调用$server->getResources()方法之后,您将获得关联资源实体的ArrayCollection。