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

0

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

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() который возвращает список объектов ресурса.

Каковы правильные аннотации для этого и почему?

благодаря

Теги:
doctrine2

1 ответ

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 связанных объектов ресурса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню