我有关系更新实体的问题(一对多,多对一)。我试图在更新时向ArrayCollection添加一些新元素,但无所事事。这是我创建和添加关系的代码:
$auctionPhoto = new AuctionPhoto();
$auctionPhoto->setAuction($auction);
$auctionPhoto->setPath($path);
$auction->getPhotos()->add($auctionPhoto);
全部由doctrine实体监听器(preUptade)运行。我创建实体(prePersist)时会执行相同的代码,但之后工作正常。
我调试这个并且在持续之前我在Auction对象中有正确的关系,但没有任何保存到数据库。
你为什么要做$auction->getPhotos()->add($auctionPhoto)
?
你应该在你的addPhoto()
实体中有一个方法addAuctionPhoto()
或Auction
,并像这样使用它:
$auction->addPhoto($auctionPhoto)
或$auction->addAuctionPhoto($auctionPhoto)
编辑:
也许你的实体Auction
不是两个实体之间关系的所有者,那么你需要添加$auctionPhoto->setAuction($auction)
,或者如果它是ManyToMany关系,那么添加$auctionPhoto->addAuction($auction)
用$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);
在运行此命令之前,您是否说数据库中没有任何内容:
$em->persist($auction);
$em->flush();
如果是这样,那就是正确的功能。您需要保持然后刷新,然后存储数据。