Какую ассоциацию доктрин мне следует использовать?

У меня есть две таблицы:

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 ответ

Решение

Я полагаю, вы хотели бы использовать 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 связанных ресурсов объектов.

Другие вопросы по тегам