【发布时间】:2018-07-15 22:45:02
【问题描述】:
我遇到了与 Doctrine 2 x Symfony 3 的 ManyToOne - OneToMany 关系的问题。
我创建了 2 个实体(我们将它们命名为 IPAddress 和 VPS),一个 VPS 可以有多个 ip,多个 ip 可以属于一个 VPS
我的 IP 地址实体:
class IPAddress
{
....
/**
* Many IPs have one server
*
* @ORM\ManyToOne(targetEntity="VPS", inversedBy="ips")
*/
protected $server;
/**
* @return mixed
*/
public function getServer()
{
return $this->server;
}
/**
* @param mixed $server
*/
public function setServer($server)
{
$this->server = $server;
}
....
}
我的 VPS 实体:
Class VPS
{
....
/**
* One server have many IPs
*
* @ORM\OneToMany(targetEntity="IPAddress", cascade={"persist", "remove"}, mappedBy="server")
*/
protected $ips;
public function __construct()
{
$this->ips = new ArrayCollection();
}
/**
* @return mixed
*/
public function getIps()
{
return $this->ips;
}
/**
* @param mixed $ips
*/
public function addIps(IPAddress $IPAddress)
{
$this->ips->add($IPAddress);
$IPAddress->setServer($this);
}
....
}
当我尝试像这样通过我的 VPS 获取 IP 时:
$em = $this->getDoctrine()->getManager();
$serverRepo = $em->getRepository('AppBundle:VPS');
$server = $serverRepo->find(4);
$server->getIps();
//From there, there is no way to get my IPs, I only have a very big object without my IPs informations, only my columns' names marked as "null"
有人有什么想法可以帮助我解决这个问题吗?我从一天开始就在搜索,找不到我做错了什么..
提前致谢! :)
【问题讨论】:
-
首先,您应该将 getIps() 的结果分配给一些变量,如下所示:
$ips = $server->getIps(); -
我已经尝试分配然后访问我的属性,但它也不起作用,这很奇怪,这不是我第一次处理这种关系而且我以前从未遇到过这个问题,我仔细检查了而且我看不出有什么问题..
-
您尝试过什么“不工作”?除非您在检索
VPS实体时尝试访问它或明确加入它,否则预计不会填充ips集合。你用什么来“访问”这些属性?
标签: php symfony doctrine-orm doctrine