我有关系更新实体的问题(一对多,多对一)。我试图在更新时向ArrayCollection添加一些新元素,但无所事事。 这是我创建和添加关系的代码:
$auctionPhoto = new AuctionPhoto();
$auctionPhoto->setAuction($auction);
$auctionPhoto->setPath($path);
$auction->getPhotos()->add($auctionPhoto);
全部由doctrine实体监听器(preUptade)运行。
当我创建实体(prePersist)时会执行相同的代码。我调试了这个并且在持续之前我在Auction对象中有正确的关系,但没有任何保存到数据库。
答案 0 :(得分:2)
你为什么要$auction->getPhotos()->add($auctionPhoto)
?
您的addPhoto()
实体中应该有方法addAuctionPhoto()
或Auction
,并按照以下方式使用:
$auction->addPhoto($auctionPhoto)
或$auction->addAuctionPhoto($auctionPhoto)
修改强>
也许您的实体Auction
不是两个实体之间关系的所有者,那么您需要添加$auctionPhoto->setAuction($auction)
,或者如果它是ManyToMany关系,则添加$auctionPhoto->addAuction($auction)
答案 1 :(得分:1)
将$auction->getPhotos()->add($auctionPhoto);
替换为$auction->addPhoto($auctionPhoto);
。
在Auction
实体中,定义新方法
// Auction.php
public function addPhoto(AuctionPhoto $thePhoto)
{
$this->photos[] = $thePhoto; // Add the photo to the object
$thePhoto->setAuction($this); // AuctionPhoto entity need to know about the reference
return $this; // Just for method chaining
}
(我假设$photos
是包含拍卖照片的ArrayCollection)
基本上你错过的是给你的实体一个参考:
$thePhoto->setAuction($this);
答案 2 :(得分:0)
在运行此命令之前,您是否说数据库中没有任何内容:
$em->persist($auction);
$em->flush();
如果是这样,那就是正确的功能。你需要保持然后刷新,然后存储数据。