Какую ассоциацию доктрин мне следует использовать?
У меня есть две таблицы:
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 связанных ресурсов объектов.